2016-05-31 24 views
2

Ich habe ein Array mit einer unbekannten Anzahl von Deferred, die ich versuche, mit $ .when aufzulösen. Wenn alle Zurückgestelltes aufgelöst worden sind, wird die '.then' Funktion mir die aufgelösten Defereds in der gleichen Reihenfolge zurückgeben, wie ich sie dann im Array eingegeben habe?

Pseudo-Code Beispiel:

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]) 
    } 
}); 

Wird deferreds [0], um Argumente gleich [0] und deferreds [x], um Argumente gleich [x]?

Vielen Dank im Voraus für alle und alle Antworten! // Edvin

+0

Ich glaube, das ist eine doppelte Frage: http://stackoverflow.com/questions/26239821/jquery-when-multiple-ajax-requests-order-of-responses – meditari

Antwort

1

Nach der Dokumentation:

Die Argumente für den doneCallbacks die aufgelösten Werte für jeden der Deferreds bieten vergangen, und passt die Reihenfolge der Deferreds wurden zu jQuery.when bestanden (). Zum Beispiel:

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"); 

Ein kleines Beispiel:

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

Vielen Dank für Ihre Antwort! Sehr gutes Beispiel. Ich hatte diesen Teil der Dokumentation bereits gelesen, wusste aber nicht, ob er auch auf Arrays angewendet wurde. Ich bin immer noch ziemlich neu in Javascript und musste mich darum kümmern :) – Edvin

0

Taking jede Frage/Aussage einen nach dem anderen ...

Does $. wenn resolve array of defereds in der gleichen Reihenfolge wie sie wir wieder in der Anordnung?

Nr. $.when() löst nicht die verzögerten/Versprechen an sie weitergegeben. Es Aggregate Deferred/Versprechungen, von denen jede auf andere Weise abwickelt (verrechnet oder ablehnt). Hier bedeutet "aggregiert", eine Reihe von Versprechen zu akzeptieren und ein einzelnes Versprechen zurückzugeben.

Ich habe ein Array mit einer unbekannten Anzahl von verzögerten, die ich versuche, mit $ .when zu lösen.

Nochmals, $.when() löst die verzögerten/versprochenen Verspätungen nicht auf.

Wenn alle Abgrenzungen aufgelöst wurden, gibt mir die '.then'-Funktion die aufgelösten Deferred in der gleichen Reihenfolge zurück, wie ich sie dann im Array eingegeben habe?

Nein, .then() gibt keine zurückgestellten, aufgelöst oder nicht. Aber ja, die Argumente seiner Erfolgs-Callback-Funktion (wenn sie ausgelöst wird) stimmen mit dem ursprünglichen Array überein.

Werden die Deferreds [0] den Argumenten [0] und die Deferreds [x] den Argumenten [x] gleichgesetzt?Kein

, werden sie nicht sein gleich, aber sie werden entsprechen, Index-by-Index. Jedes Argument ist das Ergebnis, das vom entsprechenden deferred/promise im ursprünglichen Array geliefert wird.