我有一个未知数量的延迟数组,我试图用$ .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]是等于参数[0]而deferreds [x]是否等于参数[x]?
提前感谢所有回复! //埃德温
答案 0 :(得分:1)
根据文件:
传递给doneCallbacks的参数提供已解析的值 对于每个Deferreds,并匹配Deferreds的顺序 传递给jQuery.when()。例如:
normal
一个小例子:
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");
答案 1 :(得分:0)
每次提出一个问题/陈述......
$ .when是否以与数组中相同的顺序解析延迟数组?
没有。 $.when()
无法解决传递给它的延迟/承诺。它聚合延迟/承诺,每个延迟/承诺通过其他方式解决(解决或拒绝)。在这里,“聚合”意味着接受一组承诺并返回一个承诺。
我有一个未知数量的延迟数组,我试图用$ .when来解决。
同样,$.when()
无法解决传递给它的延迟/承诺。
当所有延迟都已解决时,'.then'函数会以与我在数组中输入的顺序相同的顺序返回已解决的延迟吗?
不,.then()
不会退还延期,已解决或以其他方式。但是,它的成功回调函数(如果它触发)的参数将与原始数组一致。
deferreds [0]是等于参数[0]而deferreds [x]是否等于参数[x]?
不,它们不会相等,但它们将对应,逐个索引。每个参数都是由原始数组中相应的延迟/保证提供的结果。