Node.js synchrone Schleife
Ich bin neu node.js und ich Frage mich, ob es möglich ist, zu Durchlaufen in einer Schleife synchron. Lassen Sie uns sagen, dass in einer for-Schleife rufe ich eine blockierende Funktion ist (Lesen, schreiben) und ich will, dass die für die synchron ausgeführt (warten für die erste iteration zu beenden, dann das zweite, ...)? Ich sah ein paar tutorials über async-Modul, aber niemand bedeckt dieses problem.
for
synchron, und wenn Sie rufen nur blockierende Funktionen innerhalb der for-block-die ganze loop wird synchron als auch. Ich wusste wirklich nicht, erhalten Sie Ausgabe...- Warum sollte die Schleife nicht synchron standardmäßig?
- Dies braucht mehr Informationen.
- Wenn die bei jedem Durchlauf lese ich eine große Menge von Daten, dann node.js tun wird dies: läuft die erste Lesung versuchen, dann ist es nicht zu warten, bis diese abgeschlossen ist, und führt die zweite Lesung (iteration 2). Ich möchte, dass nach dem ersten Lesen es wartet, bis es fertig ist und läuft dann die zweite, und so weiter.
- wenn Ihr
for
Schleife wird Durchlaufen ein array, Sie sollten check outasync#eachSeries
. - "läuft die erste Lesung versuchen, dann ist es nicht zu warten, bis diese zu beenden," dies bedeutet, dass was auch immer Sie anrufen innerhalb der Schleife nicht synchron. "Ich möchte, dass nach dem ersten Lesen es wartet, bis es fertig ist und läuft dann die zweite, und so weiter." Das bedeutet also, dass Sie nicht wirklich wollen, zu Durchlaufen, synchron-Schleife, was Sie wollen, ist asynchron loop-iteration.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie nicht verwenden eine for-Schleife dafür. Die
for
Schleife wird das Feuer aus jedem der async-Funktionen gleichzeitig und das ist offensichtlich nicht das, was Sie wollen. Erstellen Sie Ihre eigenen system für den Aufruf dieser. Probieren Sie etwas wie dieses:Sollten schauen ein wenig wie diese:
Yours möglicherweise nicht genau wie ich es beschrieben hier, aber es sollte ein ähnliches Konzept wie es.
Hinweis: Sie werden wahrscheinlich brauchen eine zusätzliche Funktion, Anwendungsbereich zum Schutz Ihrer original-array von URL ' s, weil
.shift()
mutieren wird das original-arrayErwähnst du, dass du Lesen und schreiben von Dateien, verwenden Sie fs.readFile und fs.writeFile? Diese sind asynchrone Methoden, und Sie würden machen zu müssen, eine nach der anderen in Rückrufe.
Wenn Sie wollen, um eine Schleife verwenden, werfen Sie einen Blick auf die synchronen Versionen dieser Methoden fs.readFileSync und fs.writeFileSync.