我正在申请。应用程序发出两个请求,第一个是向Yelp API发出加载地图的请求,第二个是向MapBox API发出的请求(通过我的节点服务器)。通过节流测试,我发现MapBox调用的完成时间大约是Yelp调用的1/2。
我有点困惑如何管理这两个请求。我是先加载一个然后再加载下一个吗?我是不是两个都加载,然后创建两个输入函数来解释Yelp加载/ MapBox加载?
下面是我的代码目前的结构:
// -------------------------- // Yelp API Call // ------------------------- //
$.ajax({
type: 'POST',
data: {
"food_type": getParameterByName('type', window.location.href),
"geolocation": false,
"long": -1,
"lat": -1,
"radius": 1000,
"limit": 30
},
success: function(response) {
YelpCallback(response);
},
error: function(xhr) {
console.log("Failure");
console.log(xhr)
},
url: POST_baseurl + "yelp"
});
// -------------------------- // MapBox API Call // ------------------------- //
mapboxgl.accessToken = 'pk.<accesstoken>.<accesstoken>';
var map = new mapboxgl.Map({
container: 'map',
style: 'mapbox://styles/jeremysmorgan/<mapstyle url>',
center: [lat, long],
zoom: 13
});
map.on('load', function(e) {
var map_load_time = new Date().getTime() - map_start_time;
console.log("map_load_time: " + map_load_time);
MapCallback(e);
});
function YelpCallback(data) {
yelp_loaded = true;
yelp_data = data;
if (map_loaded) {
main();
}
}
function MapCallback(e) {
map_loaded = true;
if (YelpCallback) {
main();
}
}
发布于 2017-03-31 07:56:15
像这样的东西应该行得通。阅读回调(适当的回调),它们是非常有用的。http://cwbuecheler.com/web/tutorials/2013/javascript-callbacks/
function YelpAjax(callback)
{
$.ajax({
//yelp request,
success: function(response){
callback(response); //once done, call this argument with parameter: response
}
});
}
map.onload('load', function(e){
//same stuff
YelpAjax(function(response){ //this anonymous function is the argument.
main();
})
})
将Yelp AJAX请求包含在一个带有回调的函数中。将此函数放在map.onload
中。之后调用main()
。
这实际上类似于将main()
放入Ajax的success中,但嵌套更少。
$.ajax({
//yelp request,
success: function(response){
main();
}
});
您也可以尝试使用async库,它允许您非常优雅地控制异步函数,但在处理类似的事情之前,您可能需要先复习一下。http://caolan.github.io/async/
https://stackoverflow.com/questions/43129143
复制相似问题