Contrairement aux deux réponses dans les commentaires - il y a une différence.
Tandis que
Promise.resolve(x);
est fondamentalement le même que
new Promise(function(r){ r(x); });
il y a une subtilité.
Les fonctions de retour de promesse devraient généralement avoir la garantie de ne pas être lancées de manière synchrone car elles pourraient être lancées de manière asynchrone. Afin d'éviter des résultats inattendus et des conditions de course, les lancers sont généralement convertis en rejets retournés.
Dans cet esprit, lorsque la spécification a été créée, le constructeur de promesse est sécurisé.
Et si someObject
c'est undefined
?
- La voie A renvoie une promesse rejetée.
- La voie B lance de manière synchrone.
Bluebird l'a vu et Petka a ajouté Promise.method
pour résoudre ce problème afin que vous puissiez continuer à utiliser les valeurs de retour. Donc, la façon correcte et la plus simple d'écrire ceci dans Bluebird n'est en fait ni l'un ni l'autre - c'est:
var someFunction = Promise.method(function someFunction(someObject){
someObject.resolved = true;
return someObject;
});
Promise.method convertira les lancers en rejets et les retours en résolutions pour vous. C'est le moyen le plus sûr de le faire et il assimile les then
capacités via des valeurs de retour afin que cela fonctionne même s'il someObject
s'agit en fait d'une promesse elle-même.
En général, il Promise.resolve
est utilisé pour transformer des objets et des promesses étrangères (alorsables) en promesses. C'est son cas d'utilisation.
Promise.resolve
est juste du sucre.