NEWS
Syncrone exec Funktion?
-
Hallo,
ich beschäftige mich seit ein paar Stunden mit einem Problem was ich so nicht gelöst bekomme. Im Forum habe ich einige Ansätze gefunden, aber keine funktioniert so wie ich es gerne hätte.
Ich habe ein Array, mit ein paar Ping-Zielen (als Beispiel), die aber nicht gleichzeitig starten sollen, sondern nacheinander. Also wenn der Ping 1 fertig ist, soll der 2te Starten. Alle Versuche laufen paralell ab, was ich aber so nicht gebrauchen kann. Gibt es eine möglichkeit auf das ende des exec zu warten um dann das nächste zu starten?
Mein Code sieht derzeit so aus:
let pingArray = [ "localhost", "google.de", "debian.org" ]; pingArray.forEach(function(value) { console.log('Test-Ping to ' + value + ' startet...'); // Hier soll abgewartet werden, bis der "Job" abgearbeitet wurde, bevor das nächste Element abgearbeitet wird. exec('ping -c 10 ' + value); console.log('Ping ' + value + ' done....'); }); -
Hallo,
ich beschäftige mich seit ein paar Stunden mit einem Problem was ich so nicht gelöst bekomme. Im Forum habe ich einige Ansätze gefunden, aber keine funktioniert so wie ich es gerne hätte.
Ich habe ein Array, mit ein paar Ping-Zielen (als Beispiel), die aber nicht gleichzeitig starten sollen, sondern nacheinander. Also wenn der Ping 1 fertig ist, soll der 2te Starten. Alle Versuche laufen paralell ab, was ich aber so nicht gebrauchen kann. Gibt es eine möglichkeit auf das ende des exec zu warten um dann das nächste zu starten?
Mein Code sieht derzeit so aus:
let pingArray = [ "localhost", "google.de", "debian.org" ]; pingArray.forEach(function(value) { console.log('Test-Ping to ' + value + ' startet...'); // Hier soll abgewartet werden, bis der "Job" abgearbeitet wurde, bevor das nächste Element abgearbeitet wird. exec('ping -c 10 ' + value); console.log('Ping ' + value + ' done....'); });@tomtaz sagte: Gibt es eine möglichkeit auf das ende des exec zu warten um dann das nächste zu starten?
Ja, durch Nutzung der Callback-Funktion von exec():
const pingArray = [ "localhost", "google.de", "debian.org" ]; var i = 0; function sendPing() { log('Test-Ping to ' + pingArray[i] + ' startet...'); exec('ping -c 10 ' + pingArray[i], function(error, stdout, stderr) { if(!error) log('Ping ' + pingArray[i] + ' done....'); i++; if(i < pingArray.length) sendPing(); }); } sendPing(); -
Hallo,
ich beschäftige mich seit ein paar Stunden mit einem Problem was ich so nicht gelöst bekomme. Im Forum habe ich einige Ansätze gefunden, aber keine funktioniert so wie ich es gerne hätte.
Ich habe ein Array, mit ein paar Ping-Zielen (als Beispiel), die aber nicht gleichzeitig starten sollen, sondern nacheinander. Also wenn der Ping 1 fertig ist, soll der 2te Starten. Alle Versuche laufen paralell ab, was ich aber so nicht gebrauchen kann. Gibt es eine möglichkeit auf das ende des exec zu warten um dann das nächste zu starten?
Mein Code sieht derzeit so aus:
let pingArray = [ "localhost", "google.de", "debian.org" ]; pingArray.forEach(function(value) { console.log('Test-Ping to ' + value + ' startet...'); // Hier soll abgewartet werden, bis der "Job" abgearbeitet wurde, bevor das nächste Element abgearbeitet wird. exec('ping -c 10 ' + value); console.log('Ping ' + value + ' done....'); });@tomtaz sagte in Syncrone exec Funktion?:
Gibt es eine möglichkeit auf das ende des exec zu warten um dann das nächste zu starten?
Klar, mit Promises:
let pingArray = [ "localhost", "google.de", "debian.org" ]; async function ping(hostnamme) { return new Promise((resolve) => { console.log(`Test-Ping to ${hostnamme} startet...`); exec(`ping -c 10 ${hostnamme}`, (error, stdout, stderr) => { resolve(stdout); }); }); } (async () => { for (let host of pingArray) { await ping(host); console.log(`Ping ${host} done....`); } })();
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden