所以我有一个 Deferred objects 数组dataCalls
。
目前,我正在使用以下方法将它们全部触发,并在所有 Deferreds 解决后调用回调:
$.when.apply(null, dataCalls)
.always(callback);
它工作正常。现在的问题是每个 Deferred in 都dataCalls
同时触发。我怎样才能让它们连续开火-我正在考虑Deferred.then
,以及以某种方式apply()
设置的数组,then()
但假设您从 Deferred 开始,而我没有。
我可能正在考虑循环遍历数组,并将每个 Deferred 对象传递给之前的 Deferredthen()
方法。然后跟随:
$.when(dataCalls[0])
.always(callback);
有任何想法吗?
编辑:
这是漫长的一天,让我清理这个问题,希望它对其他人有用。
与我第一次写的相反,我实际上有一个Deferred.promise()
对象数组,dataCalls
.
然后将其传递到:
$.when.apply(null, dataCalls)
.always(callback);
以便在解决所有承诺时调用回调。
由于返回每个 Promise 的 Deferred 对象已经被调用,并且(在其他未显示的代码中)该过程非常快,因此每个 Deferred 都同时运行。
为了让 Deferreds 连续触发,我需要创建一个数组,数组中的每个对象都是一个返回上述承诺的函数。
然后我可以遍历数组,执行返回 promise 的函数,然后将数组中的下一个对象传递给 promise 的 .then() 方法,这将导致函数在 promise 被解析时被调用。
然后可以将最后一个 promise 传递回$.when(promise).always(callback);
.