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 someObjectfosse undefined?
- Way A restituisce una promessa rifiutata.
- Il modo B lancia in modo sincrono.
Bluebird lo ha visto e Petka ha aggiunto Promise.methodper 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à thenattraverso i valori di ritorno, quindi funzionerebbe anche se someObjectin realtà è una promessa stessa.
In generale, Promise.resolveviene utilizzato per la fusione di oggetti e promesse estere (thenables) in promesse. Questo è il suo caso d'uso.
Promise.resolveè solo zucchero.