Definiere leere Bluebird-Versprechen wie in Q
Mit Q kann ich definieren, ein neues Versprechen mit:
var queue = q();
Aber mit Bluebird, wenn ich tun:
var queue = new Promise();
Bekomme ich:
TypeError: the promise constructor requires a resolver function
Wie bekomme ich das gleiche Ergebnis hatte, dass ich mit Q?
Dies ist ein Ausschnitt von meinem code:
var queue = q()
promises = [];
queue = queue.then(function () {
return Main.gitControl.gitAdd(fileObj.filename, updateIndex);
});
//Here more promises are added to queue in the same way used above...
promises.push(queue);
return Promise.all(promises).then(function () {
//...
});
InformationsquelleAutor der Frage Fez Vrasta | 2014-03-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese Zeile ist ziemlich Häufig in der Dokumentation.
Bewusst sein, dass dies in der Regel ein anti-pattern zu verwenden. Aber wenn du weißt, was du tust,
Promise.defer()
ist ein Weg, um die Auflösung, die ist ähnlich wie Q in den Weg.Es ist jedoch davon abgeraten, diese Methode verwenden. Bluebird hat auch veraltet.
Verwenden Sie stattdessen so:
Finden Sie in der entsprechenden Dokumentation bits: Versprechen.defer() und neue Versprechen().
Nach der Aktualisierung Ihrer Frage, hier ist Ihr Problem: Sie sind das wiederverwenden die gleichen Versprechen zu lösen, mehrere Werte. Ein Versprechen kann nur gelöst werden, wenn. Es heißt, Sie haben zu verwenden
Promise.defer()
so oft, wie Sie verspricht.Sagte, dass, nachdem ich mehr von deinem code, es scheint, Sie sind wirklich die Verwendung von anti-patterns. Ein Vorteil verspricht, ist die Fehlerbehandlung. Für Ihren Fall, würden Sie brauchen nur den folgenden code:
Dies sollte genug, um Ihre Nutzung Fall. Es ist viel klarer, und es hat auch den Vorteil, wirklich Umgang mit dem Fehler richtig.
InformationsquelleAutor der Antwort Florian Margaine
Florian eine gute Antwort Für den Willen deiner ursprünglichen Frage, es gibt mehrere Möglichkeiten, um zu starten eine Kette mit Bluebird.
Einer der einfachsten ist der Aufruf
Promise.resolve()
auf nichts:oder
Also können Sie tun:
Obwohl, ich persönlich würde so etwas machen:
InformationsquelleAutor der Antwort Benjamin Gruenbaum
Stieß ich auf dieses, wie ich eine Methode, die holt eine Ressource auf dem internet und gibt den Inhalt zurück, aber ich will es zu behandeln, Verbindungs-timeouts, und wiederholen Sie bis zu X-mal mit Verzögerungen zwischen.
Als
Bluebird.defer
ist veraltet, ich habe diese, die funktioniert dieser trick:InformationsquelleAutor der Antwort Kus
Finde ich ein Muster wie dieses nützlich für jede Art von Integrationstests.
InformationsquelleAutor der Antwort Sam B.