Al contrario de ambas respuestas en los comentarios, hay una diferencia.
Mientras
Promise.resolve(x);
es básicamente lo mismo que
new Promise(function(r){ r(x); });
hay una sutileza.
Las funciones de devolución de promesas generalmente deben tener la garantía de que no deben lanzar de forma síncrona, ya que pueden lanzar de forma asincrónica. Para evitar resultados inesperados y condiciones de carrera, los lanzamientos generalmente se convierten en rechazos devueltos.
Con esto en mente, cuando se creó la especificación, el constructor de la promesa es seguro.
¿Y si someObject
es undefined
?
- Way A devuelve una promesa rechazada.
- Way B lanza sincrónicamente.
Bluebird vio esto y Petka agregó Promise.method
para abordar este problema para que pueda seguir usando valores de retorno. Entonces, la forma correcta y más fácil de escribir esto en Bluebird es en realidad ninguna de las dos, es:
var someFunction = Promise.method(function someFunction(someObject){
someObject.resolved = true;
return someObject;
});
Promise.method convertirá los lanzamientos en rechazos y los retornos a resoluciones por ti. Es la forma más segura de hacer esto y asimila then
ables a través de valores de retorno, por lo que funcionaría incluso si someObject
de hecho es una promesa.
En general, Promise.resolve
se utiliza para convertir objetos y promesas extranjeras (thenables) en promesas. Ese es su caso de uso.
Promise.resolve
es solo azúcar.