gpt4 book ai didi

javascript - jQuery Deferreds - 连续调用 Deferreds 数组

转载 作者:行者123 更新时间:2023-12-02 18:13:16 29 4
gpt4 key购买 nike

所以我有一个延迟对象数组dataCalls

目前我正在使用以下方法来解雇所有这些,并在所有 Deferreds 解决后调用回调:

$.when.apply(null, dataCalls)
.always(callback);

效果很好。现在的问题是 dataCalls 中的每个 Deferred 同时触发。我怎样才能让它们连续触发 - 我正在考虑 Deferred.then,并以某种方式 apply() 数组到 then() 但这假设您一开始就有一个 Deferred,但我没有。

我正在考虑循环遍历数组,并将每个 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 执行时调用该函数已解决。

最后一个 Promise 可以被传回到 $.when(promise).always(callback);

最佳答案

循环它们,将每个传递到 .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!
});

关于javascript - jQuery Deferreds - 连续调用 Deferreds 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19524557/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com