Gewusst wie: synchronisieren von einer Sequenz von verspricht?

Ich habe ein array von promise-Objekte, die gelöst werden müssen in der gleichen Reihenfolge, in der Sie aufgeführt sind, in das array, d.h. wir können nicht versuchen, der Lösung ein element, bis das Vorherige gelöst wurde (als Methode Promise.all([...]) tut).

Und wenn ein element abgelehnt wird, muss ich die Kette ablehnen, auf einmal, ohne zu versuchen, beheben Sie das folgende element.

Wie kann ich diese umsetzen, oder gibt es eine vorhandene Implementierung für solche sequence Muster?

function sequence(arr) {
    return new Promise(function (resolve, reject) {
        //try resolving all elements in 'arr',
        //but strictly one after another;
    });
}

BEARBEITEN

Den ersten Antworten vorschlagen, wir können nur sequence Ergebnisse der array-Elemente, nicht deren Ausführung, weil es vorgegeben ist Beispiel.

Dann aber so erzeugen Sie ein array von Verheißungen in einer Weise zu vermeiden, frühe Ausführung?

Hier ist ein modifiziertes Beispiel:

function sequence(nextPromise) {
    //while nextPromise() creates and returns another promise,
    //continue resolving it;
}

Ich würde nicht wollen, um es in eine separate Frage, weil ich glaube, es ist Teil des gleichen Problems.

LÖSUNG

Einige Antworten unten und die Diskussionen, die folgten, ging ein wenig in die Irre, aber die letztendliche Lösung, die genau das Tat, was ich suchte war die Implementierung innerhalb spex Bibliothek als Methode Sequenz. Die Methode zum iterieren durch eine Sequenz von dynamischer Länge, und erstellen Sie verspricht, wie es die business-Logik der Anwendung.

Später auf ich verwandelte es in eine gemeinsame Bibliothek für jedermann zu benutzen.

Blick in das, was .each und .reduce tun, in die docs - Sie brauchen, um an Ihnen einen promire-die Rückkehr-Funktion (was auch immer gibt, die Versprechungen, die Sie in Ihrem sequence wie für die Verkettung Versprechen, die Sie tun können promise.then(promiseReturningFn)
Ich würde vorschlagen, erweitern Ihre Antwort auf die Frage, wie eine solche Reihe von Versprechen erzeugt werden sollen, um zu vermeiden, frühe Ausführung. Dies ist ein Thema, das verdient eine ganz neue Frage, aber es ist Teil des gleichen Problems.
Wenn Sie ein promise-Objekt, bedeutet es, dass die Versprechen, hat bereits alles, was es braucht, um seine Arbeit zu tun, und alles, was Sie tun müssen, ist warten, es zu rufen Sie zurück (via Rückruf). Wenn Sie bereits ein Versprechen, und irgendwie müssen Sie jetzt tun, die Synchronisierung der Arbeit, die Art, wie Sie arbeiten, mit dem Versprechen ist gebrochen. Sie müssen gehen Sie zurück und betrachten Sie die phase, wo Sie Ihre Versprechen erstellt werden und überarbeiten Sie, dass die Verkettung verspricht zusammen wenn es sein muss.
Ich glaube, ich habe genau das, und habe meine Lösung vor, die Sie geschrieben dein Kommentar 🙂
Eine einfache und nützliche Art und Weise: synch verspricht

InformationsquelleAutor vitaly-t | 2015-04-26

Schreibe einen Kommentar