Promise.resolve vs neues Versprechen (lösen)
Ich bin mit bluebird und ich sehe zwei Möglichkeiten, um zu beheben, synchrone Funktionen in einem Versprechen, aber ich bekomme nicht die Unterschiede zwischen beiden Arten. Es sieht aus wie der stacktrace ist ein bisschen anders, so dass Sie nicht nur eine alias
richtig?
Also, was ist der bevorzugte Weg?
Weise Eine
function someFunction(someObject) {
return new Promise(function(resolve) {
someObject.resolved = true;
resolve(someObject);
});
}
Weg B
function someFunction(someObject) {
someObject.resolved = true;
return Promise.resolve(someObject);
}
InformationsquelleAutor der Frage Pipo | 2014-11-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gegenteil, beide Antworten in die Kommentare - es ist ein Unterschied.
Während
ist im Grunde das gleiche wie
gibt es eine Feinheit.
Versprechen der Rückkehr Funktionen sollten in der Regel die Garantie haben, dass Sie, sollten Sie nicht throw synchron, da Sie möglicherweise werfen asynchron. Um zu verhindern, dass unerwartete Ergebnisse und race conditions - Würfe sind in der Regel umgewandelt zurückgegeben Ablehnungen.
Mit diesem im Verstand - wenn die Skillung erstellt wurde das Versprechen Konstruktor werfen, sicher.
Was ist, wenn
someObject
istundefined
?Bluebird sah dies, und Petka Hinzugefügt
Promise.method
um dieses Problem zu beheben, so dass Sie halten können mit return-Werten. Also die korrekte und einfachste Weise, dies zu schreiben, in Bluebird ist eigentlich weder - es ist:Versprechen.Methode konvertiert wirft ablehnt und zurückgibt, löst für Sie. Es ist die am meisten werfen sichere Weg, dies zu tun, und es assimiliert
then
rungen durch die Werte zurückgeben, so würde es funktionieren, auch wennsomeObject
ist in der Tat ein Versprechen sich selbst.Im Allgemeinen
Promise.resolve
wird verwendet für die Konvertierung von Objekten und ausländischen verspricht (thenables) verspricht. Das ist Ihr Anwendungsfall.InformationsquelleAutor der Antwort Benjamin Gruenbaum