Funktionsaufrufe in for-Schleife synchrone machen

8

Ich erhalte ein Array von Strings in der Anfrage. Jede Zeichenfolge enthält einen Befehl, der auf der nativen Shell ausgeführt werden soll.

%Vor%

Das Ergebnis aller Befehle wird in der Variablen result durcheinander gebracht. Wie macht man die Funktionsaufrufe in der for loop synchron?

    
Paritosh Walvekar 06.05.2015, 09:23
quelle

4 Antworten

2

Sie können execSync oder ...

verwenden

Sie müssen eine Steuerungsflussbibliothek hinzufügen, um bei asynchronen Aufrufen zu helfen, damit Sie Ihre Funktionen seriell oder parallel ausführen können:

Thomas Roch 06.05.2015, 09:32
quelle
5

Verwenden Sie execSync anstelle von exec!

%Vor%

Wie andere bereits erwähnt haben, ist dies möglicherweise keine sehr gute Idee, da dadurch die Ereignisschleife und alle Anfragen blockiert werden. Es ist akzeptabel, wenn die ausgeführten Prozesse nur sehr kurz dauern, aber nicht anders.

Hier ist ein einfaches Muster, um den Fluss von asynchronen Funktionen in einer for-Schleife zu steuern ... jedes Mal, wenn ein Prozess zurückkehrt, wird params_finished um eins erhöht. Sobald die Anzahl der abgeschlossenen Prozesse der Gesamtzahl der Prozesse entspricht, wird die Antwort gesendet.

%Vor%     
AllTheTime 06.05.2015 09:30
quelle
0

Eine Alternative wäre, das Äquivalent zu einer Funktion sleep in der Schleife zu verwenden. Wenn Sie mehr oder weniger wissen, wie lange es für jede Instanz der Schleife dauert.

%Vor%

Siehe diese Antwort für eine vollständige Erklärung, wie dieser Ansatz funktioniert.

    
J0ANMM 21.07.2017 11:58
quelle
0

Verwenden Sie diese Funktion für eine in Serie synchrone for-Schleife

%Vor%

Und Sie benutzen diese Funktion so ...

%Vor%

oder wenn Sie

bevorzugen %Vor%     
Fernando Carvajal 12.12.2017 05:55
quelle

Tags und Links