Javascript 如何检查所有异步任务是否已完成
我正在构建一个基于地图的web应用程序。我正在尝试实现从>=2个航路点获取行驶方向 所以用户输入他的地址。首先,应用程序必须对这些地址进行地理编码以避免错误 这是表单提交事件处理程序:Javascript 如何检查所有异步任务是否已完成,javascript,jquery,asynchronous,here-api,Javascript,Jquery,Asynchronous,Here Api,我正在构建一个基于地图的web应用程序。我正在尝试实现从>=2个航路点获取行驶方向 所以用户输入他的地址。首先,应用程序必须对这些地址进行地理编码以避免错误 这是表单提交事件处理程序: $('.form-directions').on('submit', function () { waypoints = []; $('.waypoint').each(function () { geoCode($(this).val()); }); return
$('.form-directions').on('submit', function () {
waypoints = [];
$('.waypoint').each(function () {
geoCode($(this).val());
});
return false;
});
这是geoCode()
函数:
function geoCode (address) {
nokia.places.search.manager.findPlaces({
searchTerm: address,
onComplete: onGeoCodingCompleted,
searchCenter: map.center
});
}
这是一个异步任务,完成后将调用onGeoCodingCompleted()
,如下所示:
function onGeoCodingCompleted(data, requestStatus, requestId) {
if (requestStatus == "OK") {
var locations = data.results.items;
waypoints.push(locations[0].position);
} else if(requestStatus == "ERROR") {
alert("error");
}
}
因此,在地理编码过程完成后,我想规划驾驶方向。问题是,我不知道是否所有的地理编码过程都完成了。如果用户提交例如150个地址,则需要比提交2个地址更长的时间
tl;博士
如何设置在所有geoCode()任务完成后调用函数的处理程序?您可以使用
然后在geoCode
函数中
function geoCode (address) {
var deferred = $.Deferred();
nokia.places.search.manager.findPlaces({
searchTerm: address,
onComplete: function(data, requestStatus, requestId) {
onGeoCodingCompleted(data, requestStatus, requestId);
deferred.resolve();
},
searchCenter: map.center
});
return deferred.promise();
}
使用jquerydeferred。示例代码:
function do_stuff(){
var deferred = $.Deferred();
$.getJSON('/whatever.php/?callback=?',params,
function(response){
deferred.resolve(response);
});
});
return deferred;
}
$.when( do_stuff() , do_stuff() ).done(function(a1, a2) {
console.log('Stuff 1:' + a1);
console.log('Stuff 2:' + a2);
});
看看吧,谢谢!它似乎可以工作,我从地址中获取地理编码数据,但是$.when.apply()函数从未启动。我在里面放了一个警报,我记录了所有结果,但即使记录了所有结果,也没有任何警报。也许是因为它在表单提交事件中?@Trisztan我不知道为什么它不起作用。我设置了一个JSFIDLE(使用GoogleMaps地理编码,因为我有权访问它),它正在工作:。希望它能帮助你朝着正确的方向前进。
function do_stuff(){
var deferred = $.Deferred();
$.getJSON('/whatever.php/?callback=?',params,
function(response){
deferred.resolve(response);
});
});
return deferred;
}
$.when( do_stuff() , do_stuff() ).done(function(a1, a2) {
console.log('Stuff 1:' + a1);
console.log('Stuff 2:' + a2);
});