jQuery Deferreds - 连续调用Deferred数组

时间:2013-10-22 17:29:07

标签: javascript jquery asynchronous promise jquery-deferred

所以我有一个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);

1 个答案:

答案 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!
});