Contrariamente a entrambe le risposte nei commenti, c'è una differenza.
Mentre
Promise.resolve(x);
è fondamentalmente lo stesso di
new Promise(function(r){ r(x); });
c'è una sottigliezza.
Le funzioni di restituzione della promessa dovrebbero generalmente avere la garanzia che non dovrebbero essere lanciate in modo sincrono poiché potrebbero essere lanciate in modo asincrono. Per evitare risultati imprevisti e condizioni di gara, i lanci vengono solitamente convertiti in rifiuti restituiti.
Con questo in mente, quando la specifica è stata creata, il costruttore della promessa è sicuro.
E se lo someObject
fosse undefined
?
- Way A restituisce una promessa rifiutata.
- Il modo B lancia in modo sincrono.
Bluebird lo ha visto e Petka ha aggiunto Promise.method
per risolvere questo problema in modo da poter continuare a utilizzare i valori di ritorno. Quindi il modo corretto e più semplice per scrivere questo in Bluebird non è in realtà né l'uno né l'altro: è:
var someFunction = Promise.method(function someFunction(someObject){
someObject.resolved = true;
return someObject;
});
Promise.method convertirà i lanci in rifiuti e restituirà le risoluzioni per te. È il modo più sicuro per farlo e assimila le capacità then
attraverso i valori di ritorno, quindi funzionerebbe anche se someObject
in realtà è una promessa stessa.
In generale, Promise.resolve
viene utilizzato per la fusione di oggetti e promesse estere (thenables) in promesse. Questo è il suo caso d'uso.
Promise.resolve
è solo zucchero.