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 someObjectc'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.methodpour 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 thencapacités via des valeurs de retour afin que cela fonctionne même s'il someObjects'agit en fait d'une promesse elle-même.
En général, il Promise.resolveest utilisé pour transformer des objets et des promesses étrangères (alorsables) en promesses. C'est son cas d'utilisation.
Promise.resolveest juste du sucre.