2012-06-06 12 views
8

Ich versuche zu verstehen, $.when, und ich kann sehen, dass es nützlich sein kann, wenn Sie auf mehrere verzögerte warten, bevor Sie fortfahren. Allerdings bin ich mir nicht sicher, ob ich verstehe, was der Anwendungsfall für die Verwendung von $.when mit einem verzögerten ist. Zur Veranschaulichung:

var deferred = $.Deferred(); 

// Is this ever useful? 
$.when(deferred).then(...) 

// Or can I always do this? 
deferred.then(...) 

Antwort

6

Von der $.when[docs] Dokumentation:

Wenn ein Single Deferred wird an jQuery.when übergeben, das Promise-Objekt (eine Teilmenge der Deferred-Methoden) wird von der Methode zurückgegeben.

Also $.when(deferred).then(...) ist das gleiche wie deferred.promise().then(...).

Das Zusicherungsobjekt ist nur eine eingeschränkte Schnittstelle zum verzögerten Objekt. Es erlaubt Callbacks hinzuzufügen, aber nicht den Status des Deferred zu ändern (auflösen, ablehnen).

Es gibt also grundsätzlich keinen Unterschied zwischen $.when und dem Aufruf .then direkt auf dem verzögerten Objekt.

Ich glaube nicht, dass es sinnvoll ist, ein einziges verzögertes Objekt explizit zu $.when zu übergeben, da Sie keinen Vorteil erhalten. Es kann jedoch Situationen geben, in denen Sie eine Anzahl von verzögerten Objekten unbekannt haben, was bedeutet, dass es auch nur eins sein kann.

0

Sie können immer .then tun, ist .then nichts anderes als eine Abkürzung für, wenn Sie benötigen beide verwenden .done und .fail

+0

Ich denke, du hast meine Frage missverstanden. Ich habe gefragt, ob man einen Deferred in $ .when einfügt, wenn einem Deferred irgendwelche zusätzlichen Features hinzugefügt werden. Ist es immer nützlicher, Methoden direkt auf dem einzelnen Original zurückzuschicken? –

+0

'$ .when' dient zum Erstellen eines neuen verzögerten Objekts, das aufgelöst wird, wenn alle übergebenen Deferred-Codes aufgelöst wurden, oder wenn ein Fehler auftritt. Wenn Sie nur ein verzögertes Objekt übergeben, wird das gleiche zurückgestellte Objekt einfach zurückgegeben. Sie können alle diese Informationen von der API finden http://api.jquery.com/jQuery.when/ –

+0

Ich habe diese Seite mehr als 20 mal gelesen, und verstehe, dass das Versprechen-Objekt zurückgegeben wird :) Meine Frage Wann ist das für 1 aufgeschoben? –

Verwandte Themen