Ao contrário de ambas as respostas nos comentários - há uma diferença.
Enquanto
Promise.resolve(x);
é basicamente o mesmo que
new Promise(function(r){ r(x); });
existe uma sutileza.
As funções de retorno de promessa geralmente devem ter a garantia de que não devem ser lançadas de forma síncrona, pois podem ser lançadas de forma assíncrona. Para evitar resultados inesperados e condições de corrida - os lançamentos são geralmente convertidos em rejeições devolvidas.
Com isso em mente - quando a especificação foi criada, o construtor de promessa está seguro.
E se someObject
for undefined
?
- O Caminho A retorna uma promessa rejeitada.
- Way B joga sincronizadamente.
Bluebird viu isso e Petka acrescentou Promise.method
para resolver esse problema para que você possa continuar usando valores de retorno. Portanto, a maneira correta e mais fácil de escrever isso no Bluebird é, na verdade, nenhuma das duas - é:
var someFunction = Promise.method(function someFunction(someObject){
someObject.resolved = true;
return someObject;
});
Promise.method irá converter lances em rejeições e retornos em resoluções para você. É a maneira mais segura de fazer isso e assimila then
habilidades por meio de valores de retorno para que funcione mesmo que someObject
seja de fato uma promessa em si.
Em geral, Promise.resolve
é usado para lançar objetos e promessas estrangeiras (thenables) para promessas. Esse é o seu caso de uso.
Promise.resolve
é apenas açúcar.