Creiamo un semplice oggetto differita:Qual è la differenza tra un oggetto differito e il suo oggetto promessa?
defer = $.Deferred(function (defer) {
setTimeout(defer.resolve, 3000);
});
L'oggetto differite sopra sarà nello stato "sospeso" per 3 secondi, e poi passare allo stato "risolto" (a questo punto tutti i richiami legati a sarà invocato).
Diamo anche recuperare la promessa di tale oggetto differita:
promise = defer.promise();
Ora, per aggiungere funzioni di callback, che stanno per essere invocato una volta che l'oggetto differite è stato risolto, possiamo usare .done()
o .then()
. Tuttavia, è possibile richiamare questo metodo sia sull'oggetto Differito stesso o sul proprio oggetto promessa.
defer.then(handler);
o
promise.then(handler);
In entrambi i casi, viene richiamata la funzione handler
(dopo 3 secondi in questo caso).
Se usiamo $.when
, possiamo ancora passare l'oggetto differita stesso o il suo oggetto promessa:
$.when(defer).then(handler);
o
$.when(promise).then(handler);
caso, non v'è alcuna differenza tra queste due linee di codice .
Demo online:http://jsfiddle.net/G6Ad6/
Quindi, la mia domanda è: dal momento che possiamo invocare .then()
, .done()
, ecc sull'oggetto differito stesso e dal momento che possiamo passare quell'oggetto differita in $.when()
, qual è il punto di .promise()
e recuperando l'oggetto promessa? Qual è lo scopo dell'oggetto promessa? Perché c'è questa ridondanza nella funzionalità?
Ah è una copia sigillata * duh * ... che lo spiega. –
Per aggiungere a questo che mi ha reso molto più chiaro, da [docs] (http://api.jquery.com/Types/#Promise): "Promise Object - Questo oggetto fornisce un sottoinsieme dei metodi del Oggetto rinviato (quindi, fatto, non riuscito, sempre, pipe e stato) per impedire agli utenti di modificare lo stato del differito. " –