Javascript 完成异步循环后调用函数
例如,我们有以下代码:Javascript 完成异步循环后调用函数,javascript,jquery,ajax,Javascript,Jquery,Ajax,例如,我们有以下代码: var data = [obj, obj, obj]; function handler(k, v) { ... check(v, function() {}); } function check(params, callback) { ... request(options, callback); } function request(opts, callback) { $.ajax({ ... opts ...
var data = [obj, obj, obj];
function handler(k, v) {
...
check(v, function() {});
}
function check(params, callback) {
...
request(options, callback);
}
function request(opts, callback) {
$.ajax({
...
opts
...
callback
});
}
$.each(data, handler);
我们如何等待完成$。每个调用一些函数?例如,有些东西看起来像:
$.when($.each(data, handler)).then(alert(1));
我找不到解决办法
另外,我们无法知道数据的长度
另外,这不是重复的,因为代码使用承诺或其他漂亮的东西来道歉我建议查看库并开始使用承诺来解决这个问题。您还可以在前一个回调中包含每个回调,从而创建第一个回调 您需要返回jqXHR对象,并使用$将它们堆叠在一个数组中。map
:
var data = [obj, obj, obj];
function handler(v, i) {
...
return check(v, function() {});
}
function check(params, callback) {
...
return request(options, callback);
}
function request(opts, callback) {
return $.ajax({
...
opts
...
callback
});
}
$.when($.map(data, handler)).then(function(){
});
可能重复Nice解决方案,但对我不起作用:执行后无法获得新变量的结果我不知道“无法获得新变量的结果”是什么意思。是否要获得每个延迟对象的解析值?它们是then
处理程序中参数
对象的一部分。哦,糟糕,看:函数处理程序
有一个所有结果的数组,当我使用$时。然后(function(){console.log(array of results)}
它是空的,因为它是在环井结束之前执行的,听起来这是省略代码的一部分,也是另一种错误(可能您的结果不是全局性的)。您不应该以这种方式处理结果,就像我之前所说的,您需要从然后处理程序中的arguments对象中获取它们。