Bluebird, Versprechungen und dann ()
Ich habe nur mit bluebird für ein paar Tage, aber ich möchte alle meine alten code und promisify
es 🙂
Mein problem ist, dass ich immer noch nicht begreifen, den Fluss der then()
Befehle.
Betrachten Sie diese zwei Blöcke:
Einen
methodThatReturnsAPromise().then(task2).then(task3);
B
var promise = methodThatReturnsAPromise();
promise.then(task2)
promise.then(task3);
-
in Szenario A
task3
wird das Ergebnis destask2
? In B bekommen Sie alle das Ergebnis der ersten Versprechen? -
Wie funktioniert der zweite unterscheiden sich von Laufenden
Promise.all
von bluebird? -
Wie diese A/B/
Promise.all
unterscheiden, wenn es darum geht, mit dercatch
Methode (wo lege ich es).
Sorry, es ist ein Bündel von Fragen in einem.
InformationsquelleAutor der Frage Madd0g | 2014-01-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Willkommen in der wunderbaren Welt von Versprechen.
Wie
then
funktioniert in deinem BeispielIhre Behauptung in
1
korrekt ist. Wir simulieren können, ein Versprechen der Lösung in Bluebird mitPromise.resolve
auf einen Wert.Let ' s show:
Let ' s get eine Funktion zurückgibt, die ein Versprechen:
Diese kurze Schnipsel aufmerksam
"Value"
als wir sehen.Nun erstellen wir noch zwei weitere Versprechen, jeder, der aufmerksam und unterschiedliche Werte zurückgeben.
So, wie Sie sehen können, in der erste code es wird zwar aufgelöst in eine Kette, die jeweils mit dem Wert des vorherigen Teil.
Im zweiten Beispiel beide task2 und task3 werden, erhalten den gleichen Wert und führen Sie auch zusammen (das heißt, Aufgabe 3 werden nicht warten, für Aufgabe 2). Sie können sehen, dass hier.
Versprechen.alle
Versprechen.alle (oder nur die Rückgabe eines Arrays aus einer
then
Erfüllung handler und dann mit.spread
) verwendet wird, für das warten auf mehrere Ergebnisse, alle komplett. Auf Ihr Beispiel, Sie sind Einhaken auf ein einziges Ergebnis in mehrere Teile.Die fangen
Du stellst immer fangen, wo Sie wollen, dass die Fehler abgefangen werden. Wie man es normalerweise im synchronen code. Eben sich erinnern Sie zu werfen immer in ein Versprechen oder in promisified code.
InformationsquelleAutor der Antwort Benjamin Gruenbaum
Ja.
Sie nicht, Holen Sie die Ergebnisse der (parallel) Aufgaben 2 und 3 in ein neues Versprechen.
Normalerweise würden Sie legte Sie auf das Ende der Kette, außer Sie fangen wollen, einen bestimmten Fehler.
InformationsquelleAutor der Antwort Bergi
Sind Sie nicht immer ein einfaches Prinzip Verkettung
In der ersten geschrieben werden können, wie
Im zweiten Fall
Hoffe, dies erklärt den Unterschied b/w die zwei
InformationsquelleAutor der Antwort aWebDeveloper