Penso che sia normale dire che la promessa è stata risolta o risolta. La risoluzione della promessa è il processo in cui la promessa passa dallo stato pending
e acquisisce un valore associato a detto stato. Quindi, se una promessa è o fulfilled
o rejected
, sarà una promessa risolta (dato che il processo di risoluzione è terminato). Se una promessa entra nel processo di risoluzione e non passa mai a nessun altro stato, si dice che la promessa non è risolta (il processo di risoluzione non è mai terminato).
Per quanto riguarda gli altri termini rejected
o fulfilled
, sono gli altri due stati in cui la promessa pending
può passare da. reject
è abbastanza evidente IMO, gestisce i casi in cui si suppone che accada. Ora sono d'accordo che fulfill
può essere un po 'ambiguo perché potrebbe semplicemente significare che la promessa è stata completata con successo (come in fase di risoluzione). Non si suppone che descriva il processo di risoluzione ma il successo (o l'assenza di errore) del compito in questione.
Il processo di risoluzione (per risolvere una promessa) può essere osservato nel A+ spec.
Modifica.
Il motivo per cui le persone utilizzano in genere resolve
come nome del primo argomento perché il callback è passato mentre il primo argomento richiama il processo di risoluzione. Non adempie alla promessa (la promessa può ancora essere respinta), inizia a risolvere la promessa. Il meccanismo reject
non è specificato nelle specifiche, in realtà è un cortocircuito del processo di risoluzione in modo che la promessa sia risolta con reject
(non effettivamente risolto).
Ecco alcuni esempi in cui viene rifiutato p
utilizzando resolve
:
Questo è il punto 2.3.1.
var p = new Promise(resolve => setTimeout(() => resolve(p), 0));
Questo è il punto 2.3.2.3.
var p = Promise.resolve(Promise.reject('reason'));
Questo è il punto 2.3.3.2.
var thenable = { get then() { throw new Error(); } }
var p = Promise.resolve(thenable);
Questo è punto 2.3.3.3.3
var thenable = {
then: function(resolvePromise, rejectPromise){
rejectPromise(new Error());
}
}
var p = Promise.resolve(thenable);
Questo è il punto 2.3.3.4.2
var thenable = {
then: function(){
throw new Error();
}
}
var p = Promise.resolve(thenable);
ho usato Promise.resolve
qui invece del primo argomento della funzione passata giù al costruttore promessa, ma dovrebbe essere lo stesso Molte volte la funzione resolve
tramandata al costruttore è:
var p = this;
var cb = function(x){
resolve(p, x);
}
Ovviamente si può annotare questi test come:
var p = new Promise(function(resolve){
resolve(thenable);
});
Vedere http://stackoverflow.com/questions/35042068/why-is-onjected-not-called-following-promise-all-where-promise-reject-incl – guest271314
Questo collegamento non sembra rilevante. Puoi elaborare? – rrowland
_ "Mi è venuto in mente che forse se passassi un errore alla richiamata risoluzione, rifiuterebbe la Promessa." _ La 'Promessa' è stata risolta con' Errore' come valore, la 'Promessa' non è stata rifiutata. – guest271314