NEWS
Exec Befehle hintereinander ausführen
-
Hallo Leute,
ich arbeite gerade an einer Viessmann Heizungssteuerung und rufe dann folgende Befehle auf:
//Viessmann Instanz kurz Stoppen - beide können nicht schreiben exec('iobroker stop viessmann.0', function (error, stdout, stderr) { console.log('stdout: ' + stdout); }); // Setzen der Heizzeiten exec(Befehl_SchaltzeitenMo, function (error, stdout, stderr) { console.log('stdout: ' + stdout); }); .... exec(Befehl_SchaltzeitenSo, function (error, stdout, stderr) { console.log('stdout: ' + stdout); }); //Viessmann Instanz wieder starten - beide können nicht schreiben exec('iobroker start viessmann.0', function (error, stdout, stderr) { console.log('stdout: ' + stdout); });
Mein Problem ist jetzt, dass ich den letzten Befehl wirklich erst zum Schluss ausführen muss - er aber aktuell als zweites (laut Log) ausgeführt wird.
Wie macht ihr das?
-
Du musst mit den Callbacks arbeiten … oder mit Promises.
Ich weiss, am Anfang ist das komisch ... aber Javascript ist halt asynchron.
-
Wenn die Befehle hintereinander abgearbeitet werden sollen und auch die maximale Laufzeit der Befehle bekannt ist, dann könnte timeout() helfen
setTimeout(function () { exec('iobroker stop viessmann.0', function (error, stdout, stderr) { console.log('stdout: ' + stdout); }, 1000); // wird nach einer Sekunde ausgeführt setTimeout(function () { exec(Befehl_SchaltzeitenMo, function (error, stdout, stderr) { console.log('stdout: ' + stdout); }, 2000); // wird nach zwei Sekunden ausgeführt
Das ist zwar durch die Brust in's Auge. Aber JS kennt nun mal kein delay(), das an dieser Stelle kurz wartet.