Im Gegensatz zu beiden Antworten in den Kommentaren gibt es einen Unterschied.
Während
Promise.resolve(x);
ist im Grunde das gleiche wie
new Promise(function(r){ r(x); });
es gibt eine Subtilität.
Versprechende Rückgabefunktionen sollten im Allgemeinen die Garantie haben, dass sie nicht synchron ausgelöst werden, da sie möglicherweise asynchron ausgelöst werden. Um unerwartete Ergebnisse und Rennbedingungen zu vermeiden, werden Würfe normalerweise in zurückgegebene Ablehnungen umgewandelt.
In diesem Sinne ist der Versprechen-Konstruktor bei der Erstellung der Spezifikation sicher.
Was passiert , wenn someObject
ist undefined
?
- Weg A gibt ein abgelehntes Versprechen zurück.
- Weg B wirft synchron.
Bluebird hat dies Promise.method
erkannt und Petka hat hinzugefügt , um dieses Problem zu beheben, damit Sie weiterhin Rückgabewerte verwenden können. Der richtige und einfachste Weg, dies in Bluebird zu schreiben, ist eigentlich keiner - es ist:
var someFunction = Promise.method(function someFunction(someObject){
someObject.resolved = true;
return someObject;
});
Promise.method konvertiert Würfe in Ablehnungen und kehrt für Sie in Auflösungen zurück. Es ist der sicherste Weg, dies zu tun, und es assimiliertthen
Fähigkeiten durch Rückgabewerte, so dass es funktionieren würde, selbst wenn someObject
es tatsächlich ein Versprechen selbst ist.
Promise.resolve
Wird im Allgemeinen verwendet, um Objekte und ausländische Versprechen (thenables) in Versprechen umzuwandeln. Das ist der Anwendungsfall.
Promise.resolve
ist nur Zucker.