Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Syncrone exec Funktion?

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Syncrone exec Funktion?

    This topic has been deleted. Only users with topic management privileges can see it.
    • T
      tomtaz last edited by 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....'); 
      });
      
      paul53 haus-automatisierung 2 Replies Last reply Reply Quote 0
      • paul53
        paul53 @tomtaz last edited by paul53

        @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();
        
        1 Reply Last reply Reply Quote 0
        • haus-automatisierung
          haus-automatisierung Developer Most Active @tomtaz last edited by

          @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....`);
              }
          })();
          
          1 Reply Last reply Reply Quote 0
          • First post
            Last post

          Support us

          ioBroker
          Community Adapters
          Donate

          526
          Online

          31.8k
          Users

          80.0k
          Topics

          1.3m
          Posts

          3
          3
          185
          Loading More Posts
          • Oldest to Newest
          • Newest to Oldest
          • Most Votes
          Reply
          • Reply as topic
          Log in to reply
          Community
          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
          The ioBroker Community 2014-2023
          logo