$.when 是不是以与数组中相同的顺序解析延迟数组?
Posted
技术标签:
【中文标题】$.when 是不是以与数组中相同的顺序解析延迟数组?【英文标题】:Does $.when resolve array of deferreds in the same order as they were in the array?$.when 是否以与数组中相同的顺序解析延迟数组? 【发布时间】:2016-05-31 13:41:05 【问题描述】:我有一个未知数量的延迟数组,我试图用 $.when 来解决。当所有的延迟都已解决后,'.then' 函数是否会按照我在数组中输入的顺序将已解决的延迟返回给我?
伪代码示例:
var deferreds = [];
for(0,1,2,...,x)
var def = JsonRpc(...);
deferreds.push(def);
$.when.apply($, deferreds).then(function ()
console.log(arguments.length); //outputs a number >= 0
for(0,1,2,...,x)
console.log("Defered: ", arguments[0,1,2,...,x])
);
deferreds[0] 是否等于 arguments[0] 并且 deferreds[x] 是否等于 arguments[x]?
提前感谢所有回复! //埃德文
【问题讨论】:
我相信这是一个重复的问题:***.com/questions/26239821/… 【参考方案1】:根据文档:
传递给 doneCallbacks 的参数提供解析的值 对于每个 Deferred,并匹配 Deferred 的顺序 传递给 jQuery.when()。例如:
var d1 = $.Deferred();
var d2 = $.Deferred();
$.when( d1, d2 ).done(function ( v1, v2 )
console.log( v1 ); // "Fish"
console.log( v2 ); // "Pizza"
);
d1.resolve( "Fish" );
d2.resolve( "Pizza" );
一个小例子:
var deferreds = [];
for (var i = 0; i < 3; i++)
var def = $.Deferred();
deferreds.push(def);
$.when.apply($, deferreds).then(function()
console.log(arguments.length); //outputs a number >= 0
for (var i = 0; i < 3; i++)
console.log("Defered: ", arguments[i]);
);
deferreds[1].resolve("Fish2");
deferreds[2].resolve("Fish3");
deferreds[0].resolve("Fish1");
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
【讨论】:
感谢您的回复!很好的例子。我已经阅读了文档的那部分,但我不知道它是否也适用于数组。我对 javascript 还是很陌生,所以必须确保 :)【参考方案2】:每次回答一个问题/陈述...
$.when 解析延迟数组的顺序是否与它们在数组中的顺序相同?
没有。 $.when()
不解决传递给它的延迟/承诺。它聚合延迟/承诺,每一个都通过其他方式解决(解决或拒绝)。在这里,“聚合”意味着接受一组承诺并返回一个承诺。
我有一个未知数量的延迟数组,我试图用 $.when 来解决。
同样,$.when()
无法解析传递给它的延迟/承诺。
当所有的延迟都被解决后,'.then' 函数是否会按照我在数组中输入 then 的顺序返回已解决的延迟?
不,.then()
不会退回延期、已解决或其他方式。但是是的,它的成功回调函数(如果它触发)的参数将与原始数组一致。
deferreds[0] 是否等于 arguments[0] 而 deferreds[x] 是否等于 arguments[x]?
不,它们不会相等,但它们会对应,逐个索引。每个参数将是原始数组中相应的 deferred/promise 传递的 result。
【讨论】:
以上是关于$.when 是不是以与数组中相同的顺序解析延迟数组?的主要内容,如果未能解决你的问题,请参考以下文章
在 Keras 中使用 `predict` 以与给定相同的顺序预测一维数组
即使在删除某些单元格后,仍以与 TableView 单元格相同的顺序将文本字段值保存在数组中
交易取消原因是不是以与 TransactWriteItemsRequest 相同的顺序返回
本地写入是不是以与生成的顺序相同的顺序提交到 firebase