then()
bedeutet immer, dass es in jedem Fall aufgerufen wird. Aber die Parameter, die übergeben werden, sind in verschiedenen jQuery-Versionen unterschiedlich.
Vor jQuery 1.8, then()
ist gleich done().fail()
. Und alle Callback-Funktionen haben die gleichen Parameter.
Aber ab jQuery 1.8, then()
gibt ein neues Versprechen zurück, und wenn es einen Wert zurückgegeben hat, wird dieser an die nächste Callback-Funktion übergeben.
Sehen wir uns das folgende Beispiel an:
var defer = jQuery.Deferred();
defer.done(function(a, b){
return a + b;
}).done(function( result ) {
console.log("result = " + result);
}).then(function( a, b ) {
return a + b;
}).done(function( result ) {
console.log("result = " + result);
}).then(function( a, b ) {
return a + b;
}).done(function( result ) {
console.log("result = " + result);
});
defer.resolve( 3, 4 );
Vor jQuery 1.8 sollte die Antwort lauten
result = 3
result = 3
result = 3
Alle result
nimmt 3. Und then()
Funktion übergibt immer dasselbe deferred object an die nächste Funktion.
Aber ab jQuery 1.8 sollte das Ergebnis sein:
result = 3
result = 7
result = NaN
Weil die erste then()
Funktion gibt ein neues Versprechen zurück, und der Wert 7 (und dies ist der einzige Parameter, der weitergegeben wird) wird an die nächste done()
so dass die zweite done()
schreiben. result = 7
. Die zweite then()
nimmt 7 als Wert von a
und nimmt undefined
als den Wert von b
so dass die zweite then()
gibt ein neues Versprechen mit dem Parameter NaN zurück, und die letzte done()
gibt NaN als Ergebnis aus.
15 Stimmen
Bitte beachten Sie, dass JQuery 3.0, das im Juni 2016 veröffentlicht wurde, die erste Version war, die mit der Promises/A+ und ES2015 Promises-Spezifikation konform war. Die Implementierung davor hatte Inkompatibilitäten mit dem, was Promises liefern sollten.
0 Stimmen
I aktualisiert meine Antwort mit einer verbesserten Empfehlung, was wann zu verwenden ist.