2012-06-06 2 views
8

J'essaie de comprendre $.when, et je peux voir que cela peut être utile lorsque vous voulez attendre plusieurs reports avant de continuer. Cependant, je ne suis pas sûr de comprendre quel est le cas d'utilisation de $.when avec un différé. Pour illustrer:

var deferred = $.Deferred(); 

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

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

Répondre

6

De la documentation $.when[docs]:

Si une single Différé est passé à jQuery.when, son objet Promise (un sous-ensemble des méthodes Deferred) est renvoyé par la méthode.

Donc, $.when(deferred).then(...) est la même que deferred.promise().then(...).

L'objet de promesse est juste une interface limitée à l'objet différé. Il permet d'ajouter des callbacks, mais pas de changer l'état du Deferred (le résoudre, le rejeter). Donc, de façon concluante, il n'y a pratiquement aucune différence entre l'utilisation de $.when et l'appel .then directement sur l'objet différé.

Je ne pense pas qu'il est logique de passer un seul objet différé explicitement à $.when, puisque vous n'avez aucun avantage. Cependant, il peut y avoir des situations dans lesquelles vous avez un nombre inconnu d'objets différés, ce qui signifie qu'il peut également s'agir d'un seul.

0

Vous pouvez toujours faire .then, .then est rien de plus qu'un raccourci lorsque vous avez besoin d'utiliser les deux .done et .fail

+0

Je pense que vous avez mal compris ma question. Je demandais si envelopper un différé dans $ .when ajoute des fonctionnalités supplémentaires à un différé. Est-il toujours plus utile d'appeler les méthodes directement sur l'original unique différé? –

+0

'$ .when' a pour but de créer un nouvel objet différé qui se résout lorsque tous les passés en différés sont résolus, ou échoue lorsque l'un d'entre eux échoue. Si vous ne passez qu'un seul objet différé, le même objet différé est simplement renvoyé. Vous pouvez trouver toutes ces informations depuis l'API http://api.jquery.com/jQuery.when/ –

+0

J'ai relu cette page plus de 20 fois, et je comprends que l'objet promis est retourné :) Ma question est quand est-ce utile pour 1 différé? –