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 someObjectist undefined?
- Weg A gibt ein abgelehntes Versprechen zurück.
- Weg B wirft synchron.
Bluebird hat dies Promise.methoderkannt 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 someObjectes tatsächlich ein Versprechen selbst ist.
Promise.resolveWird im Allgemeinen verwendet, um Objekte und ausländische Versprechen (thenables) in Versprechen umzuwandeln. Das ist der Anwendungsfall.
Promise.resolveist nur Zucker.