NodeJS, Async forEachSeries Reihenfolge der Ausführung

Nur versuchen in meinen Kopf zu kriegen mit Async-Modul für NodeJS.

Ich habe den folgenden code.

var a1 = [1,2,3,4,5,6,7,8];
async.forEachSeries(a1, function(n1, callback) {
    console.log(n1);
    var a2 = [10,11,12,13,14];
    async.forEachSeries(a2, function(n2, callback) {
        console.log(n1 + " " + n2);
        callback();
    });
    callback();
});

Möchte ich den Prozess der obige code in einer solchen Weise, dass das drucken wird

1
1 10
1 11
1 12
1 13
1 14
2
2 10
2 11
2 12
2 13
2 14
3
3 10
3 11
3 12
3 13
3 14
.....

Sondern ich bin immer so etwas wie..

1
1 10
2
2 10
1 11
3
3 10
2 11
1 12
....

Wie kann ich dieses Problem beheben?

  • Wenn Sie brauchen, synchrone Ausgabe, warum führen Sie es async?
  • hm. nicht forEachSeries führen in einer synchronen Art und Weise?
  • Beide Knoten 0.10.3 und 0.8.16 produzieren, die Ausgabe, die Sie wollen auf meinem Mac. Sind Sie umleiten der Ausgabe des Skripts in eine Datei (oder anderes Programm)? Das Verhalten ändert process.stdout, und daher console.log als gut, so dass könnte dazu führen, dass verschiedene Ausgabe. Und forEachSeries ist synchron, die nächste iteration wird nur aufgerufen werden, sobald der Vorherige fertig ist.
  • Hm.. du hast Recht. Auf meinem Rechner hat in der Tat produziert die Ausgabe, die Sie erwarten, wie auch. Aber ich würde lieber nennen es auch "in sequence" als "synchron". Ich bin mit Knoten 0.10.3 btw.
  • Ich denke, es ist eine Frage der Semantik 🙂 würde ich es nennen, synchronisiert, da die Operationen sind voneinander abhängig (N+1) wird nur einmal aufgerufen (N) abgeschlossen hat.
  • Ja, aber zwischen der Ausführung von (N+1) und (N), andere Sachen passieren könnte, und es immer noch kann "in-Sequenz". Aber ich Stimme zu, es ist eine Frage der sematics 🙂
  • Seltsam, ich war nicht umleiten der Ausgabe in ein anderes Programm. Die Lösung gegeben durch @spotirca gut für mich gearbeitet.

InformationsquelleAutor ericbae | 2013-04-11
Schreibe einen Kommentar