I tre stati di promessa sono elencati in section 2.1 of the Promises/A+ specification.
Dalla specifica:
Così qui sono ciascuno dei termini che ha chiesto circa:
attesa è stato promessa iniziale. L'operazione rappresentata dalla promessa non è stata ancora riempita o respinta.
Soddisfacente è un altro dei tre stati di promessa. Significa che la promessa è stata risolta e ora ha il suo valore risolto. L'operazione rappresentata dalla promessa è stata completata con successo.
Respinto è un altro dei tre stati di promessa. Significa che la promessa è stata respinta e ora ha la sua ragione respinta. L'operazione rappresentata dalla promessa non è riuscita ad ottenere un valore e quindi ha un motivo per non riuscire a farlo (in genere un codice di errore o un oggetto di errore, ma può essere qualsiasi cosa).
Fondata è un termine che significa la promessa è adempiuta o o rifiutato (per esempio non è in attesa di più), ma non è uno stato separato solo un termine descrittivo per indicare che non è più in sospeso.
risolto è un termine che viene spesso utilizzato per indicare lo stesso fulfilled
, ma i due non sono esattamente gli stessi. Una promessa può essere risolta con un valore che porta alla realizzazione o può essere risolta con una promessa respinta (che porta al rifiuto di questa promessa) o può essere risolta con una promessa in sospeso (il che significa che ora aspetterà sull'eventuale stato di qualche altra promessa).
È difficile dire esattamente cosa intendi per differire. Le promesse sono spesso classificate come oggetti deferred
in quanto sono un oggetto che rappresenta un'azione e un risultato che è rinviato al futuro (si verificherà in futuro). In alcune implementazioni di promesse, ci sono in realtà due tipi di oggetti, un oggetto deferred
e un oggetto promise
. L'oggetto differito è un superset dell'oggetto promessa. Entrambi possono osservare quando l'azione viene risolta o respinta con i gestori .then()
. Tuttavia, solo l'oggetto deferred
può effettivamente cambiare lo stato in resolved
o rejected
.
In jQuery, è possibile creare un oggetto posticipato con $.Deferred()
. In altre implementazioni come ES6 promette, hai solo oggetti promettenti con un callback costruttore che ha le funzioni reject
e resolve
. Il mondo presumibilmente si sta muovendo verso ciò che ES6 avrà.
jQuery esempio che utilizza un oggetto deferred
:
function delay(t) {
var defer = $.Deferred();
setTimeout(function() {
defer.resolve();
}, t);
return defer.promise()
}
delay(200).then(function() {
// run my delayed function now
doMyThing();
});
ES6 promessa esempio:
function delay(t) {
return new Promise(function(resolve, reject) {
setTimeout(function() {
resolve();
}, t);
});
}
delay(200).then(function() {
// run my delayed function now
doMyThing();
});
Sfortunatamente, questa terminologia non viene utilizzata in modo coerente. In particolare, troppe persone usano "risolto" per significare "soddisfatto".È possibile trovare questo utile: http://stackoverflow.com/questions/18280375/q-js-difference-between-resolve-and-fulfill/18295163#18295163 –