Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. Syncrone exec Funktion?

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    2.3k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    958

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.2k

Syncrone exec Funktion?

Geplant Angeheftet Gesperrt Verschoben JavaScript
3 Beiträge 3 Kommentatoren 307 Aufrufe 3 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • T Offline
    T Offline
    tomtaz
    schrieb am zuletzt editiert von tomtaz
    #1

    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....'); 
    });
    
    paul53P haus-automatisierungH 2 Antworten Letzte Antwort
    0
    • T tomtaz

      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....'); 
      });
      
      paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von paul53
      #2

      @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();
      

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      1 Antwort Letzte Antwort
      0
      • T tomtaz

        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....'); 
        });
        
        haus-automatisierungH Online
        haus-automatisierungH Online
        haus-automatisierung
        Developer Most Active
        schrieb am zuletzt editiert von
        #3

        @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....`);
            }
        })();
        

        🧑‍🎓 Autor des beliebten ioBroker-Master-Kurses
        🎥 Tutorials rund um das Thema DIY-Smart-Home: https://haus-automatisierung.com/
        📚 Meine inoffizielle ioBroker Dokumentation

        1 Antwort Letzte Antwort
        0
        Antworten
        • In einem neuen Thema antworten
        Anmelden zum Antworten
        • Älteste zuerst
        • Neuste zuerst
        • Meiste Stimmen


        Support us

        ioBroker
        Community Adapters
        Donate

        779

        Online

        32.6k

        Benutzer

        82.2k

        Themen

        1.3m

        Beiträge
        Community
        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
        ioBroker Community 2014-2025
        logo
        • Anmelden

        • Du hast noch kein Konto? Registrieren

        • Anmelden oder registrieren, um zu suchen
        • Erster Beitrag
          Letzter Beitrag
        0
        • Home
        • Aktuell
        • Tags
        • Ungelesen 0
        • Kategorien
        • Unreplied
        • Beliebt
        • GitHub
        • Docu
        • Hilfe