所以我有一个Deferred对象数组dataCalls
。
目前我正在使用以下内容解雇所有人,并在所有Deferreds解决后调用回调:
$.when.apply(null, dataCalls)
.always(callback);
工作正常。现在问题是dataCalls
中的每个延迟都会同时发生。我怎样才能让它们连续发射 - 我正在考虑Deferred.then
,并且不知何故apply()
数组到then()
但是假设你有一个延迟开始,我不。
我在考虑循环遍历数组,并将每个Deferred对象传递给之前的Deferred then()
方法。然后按照:
$.when(dataCalls[0])
.always(callback);
有什么想法吗?
修改
这是漫长的一天,让我清理一下这个问题,这对其他人来说是有用的。
与我第一次写的相反,我实际上有一组Deferred.promise()
个对象,dataCalls
。
然后将其传递到:
$.when.apply(null, dataCalls)
.always(callback);
以便在解析所有promise时调用回调。
由于已经调用了返回每个promise的Deferred对象,并且(在其他代码中未显示)该进程非常快,因此每个Deferred都会同时运行。
为了让Deferreds连续触发,我需要创建一个数组,数组中的每个对象都是一个返回所述promise的函数。
然后我可以循环遍历数组,执行返回promise的函数,然后将数组中的下一个对象传递给promise的.then()方法,这将导致函数在promise中被调用解决。
然后可以将最后一个承诺传递回$.when(promise).always(callback);
。
答案 0 :(得分:2)
循环遍历它们,将每个传递到.then
var reqArr = [{url: "somepage.php"},{url: "somepage1.php"},{url: "somepage2.php"}];
var req = $.ajax(reqArr.shift());
$.each(reqArr,function(i,obj){
req.then(function(){
return $.ajax(obj);
});
});
req.done(function(){
//They are all done!
});