2016-05-31 53 views
2

我有一个未知数量的延迟数组,我试图用$ .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

我相信这是一个重复的问题:http://stackoverflow.com/questions/26239821/jquery-when-multiple-ajax-requests-order-of-responses – meditari

回答

1

根据文档:

传递给doneCallbacks的参数用于每个Deferreds的提供解析值 ,并且Deferreds传递给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>

+0

感谢您的回复!很好的例子。我已经阅读过那部分文档,但我不知道它是否也适用于数组。我还是很新的Javascript,所以不得不确保:) – Edvin

0

考虑每一个问题/语句一次一个......

是否$。当按照与我们相同的顺序解析延迟数组时重新在阵列中?

$.when()不能解析传递给它的延迟/承诺。 汇总延期/承诺,其中每一个通过其他方式解决(解决或拒绝)。在这里,“聚合”意味着接受一组承诺并返回一个承诺。

我有一个未知数量的延迟数组,我试图用$ .when来解析。

同样,$.when()不能解析传递给它的延迟/承诺。

当所有的延期被解决后,'.then'函数会按照我在数组中输入的相同顺序给我解决的延迟?

不,.then()不给予延期,解决或以其他方式。但是,是的,它的成功回调函数(如果它触发)的参数将与原始数组一致。

deferreds [0]等于参数[0],deferreds [x]等于参数[x]?

不,他们不会等于,但他们会对应,指数的指数。每个参数将是结果由原始数组中的相应延迟/承诺递送。

相关问题