2016-06-29 5 views
0

vor einiger Zeit fand ich mich in Schwierigkeiten bei der Arbeit mit jQuery verspricht. Ich habe versucht, Code auszuführen, nachdem ein Array von Versprechen mit der Funktion .then() gelöst wurde. Es hat jedoch nie funktioniert, als eines der Versprechen abgelehnt wurde. (Mit immer() Funktion funktioniert)Unterschied zwischen jQuery Defered dann und immer

Wenn ich in der offiziellen Dokumentation sehe ich finde diese:

Then: Description: Add handlers to be called when the Deferred object 
     is resolved, rejected, or still in progress. 

Always: Description: Add handlers to be called when the Deferred 
     object is either resolved or rejected. 

Offenbar auf beiden Fällen, wenn meine Versprechen gelöst/abgelehnte sollte es die Callback-Funktionen dann ausführen und immer, aber es tut nicht.

Kann mir jemand dieses Verhalten erklären?

Hier ist die fiddle

Vielen Dank!

Antwort

1
it should execute the callback functions of then and always, but it doesnt. 

Es wurde keine Funktion zum Behandeln von abgelehnten Versprechen im ersten Beispiel angehängt. Hinzufügen .fail(), .always()-.then() angekettet oder zweiten Parameter bei .then() umfassen rjct.reject()

var rslv = $.Deferred(); 
 
var rjct = $.Deferred(); 
 

 
var promises = []; 
 
promises.push(rslv); 
 
promises.push(rjct); 
 

 
$.when.apply(null, promises).then(function(res) { 
 
    alert("not finished"); 
 
} 
 
// handle rejected promise 
 
, function(reason) { 
 
    alert("handle " + reason); 
 
}); 
 
rslv.resolve("123"); 
 
rjct.reject("rejected promise"); 
 

 
var rslv2 = $.Deferred(); 
 
var rjct2 = $.Deferred(); 
 

 
var promises2 = []; 
 
promises2.push(rslv2); 
 
promises2.push(rjct2); 
 

 
$.when.apply(null, promises).always(function(res) { 
 
    alert("finished"); 
 
}); 
 
rslv2.resolve(); 
 
rjct2.resolve();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

abgelehnt Versprechen zu handhaben
Verwandte Themen