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. Gelöst: JS: Wie erst nach File-Erstellung weiter?

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.7k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.2k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.1k

Gelöst: JS: Wie erst nach File-Erstellung weiter?

Geplant Angeheftet Gesperrt Verschoben JavaScript
javascript
6 Beiträge 4 Kommentatoren 799 Aufrufe 7 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.
  • MicM Offline
    MicM Offline
    Mic
    Developer
    schrieb am zuletzt editiert von Mic
    #1

    Hi,

    ich lasse eine neue Datei erzeugen, falls diese noch nicht existiert. Danach führe ich weiteren Code aus, ohne zu warten, bis das File erstellt wurde. Wie kann man das denn hier einbauen, dass erst dann der nachfolgende Code ausführt wird, sobald die Datei im Filesystem erstellt wurde?

    Siehe folgendes Script (Auszug):

    function startTailingProcess() {
     
        // Path to iobroker log file
        let strFsFullPath = getCurrentFullFsLogPath();
     
        // Create a new log file. It will created if it is not yet existing.
        // This will avoid an error if right after midnight the log file is not yet there
    																											 
        const fs = require('fs');
        if (fs.existsSync(strFsFullPath)) {
            // File is existing
        } else {
            // File is not existing, so we create it.
            if (LOG_DEBUG) log (DEBUG_IGNORE_STR + 'Log file is not existing, so we need to create a blank file.');
            fs.writeFile(strFsFullPath, '', function(err) {
                if(err) return log(err);
            }); 
        }
     
        // Now start new tailing instance
        if(LOG_INFO) log('Start new Tail process. File path to current log: [' + strFsFullPath + ']');
        G_tail = new G_Tail(strFsFullPath, G_tailOptions);
     
    }
    

    Frage kam hier auf: https://forum.iobroker.net/post/304548

    Danke für eure Hilfe.

    AlCalzoneA 1 Antwort Letzte Antwort
    1
    • arteckA Offline
      arteckA Offline
      arteck
      Developer Most Active
      schrieb am zuletzt editiert von
      #2

      ich erzeuge in dem Fall 2 Dateien... die eine die ich haben will und wen diese da ist eine .ack (acknowledge) Daeti hinterher
      erst wenn diese da ist wiss ich das die richtig eDatei angelegt worden ist.. wird oft im FTP Transfer benutzt

      zigbee hab ich, zwave auch, nuc's genauso und HA auch

      1 Antwort Letzte Antwort
      1
      • SBorgS Offline
        SBorgS Offline
        SBorg
        Forum Testing Most Active
        schrieb am zuletzt editiert von
        #3

        Wahrscheinlich wohl nicht, aber bietet sich da nicht async/await an, oder kann man das bei Files nicht nutzen?

        LG SBorg ( SBorg auf GitHub)
        Projekte: Lebensmittelwarnung.de | WLAN-Wetterstation | PimpMyStation

        1 Antwort Letzte Antwort
        1
        • MicM Mic

          Hi,

          ich lasse eine neue Datei erzeugen, falls diese noch nicht existiert. Danach führe ich weiteren Code aus, ohne zu warten, bis das File erstellt wurde. Wie kann man das denn hier einbauen, dass erst dann der nachfolgende Code ausführt wird, sobald die Datei im Filesystem erstellt wurde?

          Siehe folgendes Script (Auszug):

          function startTailingProcess() {
           
              // Path to iobroker log file
              let strFsFullPath = getCurrentFullFsLogPath();
           
              // Create a new log file. It will created if it is not yet existing.
              // This will avoid an error if right after midnight the log file is not yet there
          																											 
              const fs = require('fs');
              if (fs.existsSync(strFsFullPath)) {
                  // File is existing
              } else {
                  // File is not existing, so we create it.
                  if (LOG_DEBUG) log (DEBUG_IGNORE_STR + 'Log file is not existing, so we need to create a blank file.');
                  fs.writeFile(strFsFullPath, '', function(err) {
                      if(err) return log(err);
                  }); 
              }
           
              // Now start new tailing instance
              if(LOG_INFO) log('Start new Tail process. File path to current log: [' + strFsFullPath + ']');
              G_tail = new G_Tail(strFsFullPath, G_tailOptions);
           
          }
          

          Frage kam hier auf: https://forum.iobroker.net/post/304548

          Danke für eure Hilfe.

          AlCalzoneA Offline
          AlCalzoneA Offline
          AlCalzone
          Developer
          schrieb am zuletzt editiert von AlCalzone
          #4

          @Mic sagte in JS: Wie erst nach File-Erstellung fortsetzen?:

          Wie kann man das denn hier einbauen, dass erst dann der nachfolgende Code ausführt wird, sobald die Datei im Filesystem erstellt wurde?

          Ich sehe 3 Möglichkeiten:

          1. Verwende fs.writeFileSync statt fs.writeFile. Aber Vorsicht, writeFileSync blockiert während des Schreibvorgangs den EventLoop, was bei vielen Schreibvorgängen die System-Performance beeinträchtigt.

          2. Lagere den Code, der nur bei vollständiger Datei ausgeführt werden soll, in eine eigene Funktion aus. Rufe diese Funktion sowohl im if-Branch (Datei existiert) und im Callback von writeFile (wenn es keinen Fehler gab) auf .

          3. Nutze das fs-extra-Modul, welches alle fs-Methoden promisifiziert (muss in der Adapterkonfiguration eingetragen werden) zusammen mit async/await:

          async function startTailingProcesses() {
            //...
            const fs = require("fs-extra");
          
            // ...
          
            // Zeile 15-17 ersetzen durch:
            try {
              await fs.writeFile(strFsFullPath, '');
            } catch (err) {
              log(err);
              // hier sollte vermutlich NICHT weiter gemacht werden,
              // die Datei existiert wahrscheinlich nicht
            }
          
            // ...
          }
          

          Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

          MicM 1 Antwort Letzte Antwort
          1
          • AlCalzoneA AlCalzone

            @Mic sagte in JS: Wie erst nach File-Erstellung fortsetzen?:

            Wie kann man das denn hier einbauen, dass erst dann der nachfolgende Code ausführt wird, sobald die Datei im Filesystem erstellt wurde?

            Ich sehe 3 Möglichkeiten:

            1. Verwende fs.writeFileSync statt fs.writeFile. Aber Vorsicht, writeFileSync blockiert während des Schreibvorgangs den EventLoop, was bei vielen Schreibvorgängen die System-Performance beeinträchtigt.

            2. Lagere den Code, der nur bei vollständiger Datei ausgeführt werden soll, in eine eigene Funktion aus. Rufe diese Funktion sowohl im if-Branch (Datei existiert) und im Callback von writeFile (wenn es keinen Fehler gab) auf .

            3. Nutze das fs-extra-Modul, welches alle fs-Methoden promisifiziert (muss in der Adapterkonfiguration eingetragen werden) zusammen mit async/await:

            async function startTailingProcesses() {
              //...
              const fs = require("fs-extra");
            
              // ...
            
              // Zeile 15-17 ersetzen durch:
              try {
                await fs.writeFile(strFsFullPath, '');
              } catch (err) {
                log(err);
                // hier sollte vermutlich NICHT weiter gemacht werden,
                // die Datei existiert wahrscheinlich nicht
              }
            
              // ...
            }
            
            MicM Offline
            MicM Offline
            Mic
            Developer
            schrieb am zuletzt editiert von
            #5

            @AlCalzone
            Super, vielen lieben Dank für die ausführliche Antwort :-)
            Ich habe jetzt zunächst deine Option 2 umgesetzt.

            Dabei wurde mir bewusst, dass ich mich nie wirklich mit Callback, Promises und async und await beschäftigt hatte. Dabei ist dies wohl enorm wichtig. Ich habe daher gleich mal ein paar setTimeout() raus geworfen aus meinem Script, und stattdessen async/await eingebaut.

            Gerade setTimeout() war/ist echt eine schlechte Gewohnheit, die ich damals halt so aus Scriptvorlagen übernommen und so bislang durchgezogen hatte, also z.B. einfach mal 2 Sekunden mittels setTimeout() setzen, um zu "hoffen", dass dann die vorherige Funktion durchlaufen ist.

            Ich werde nun nach und nach all meine Scripts auf callback und async/await umstellen. Damit kann ich auch ein deutlich besseres Errorhandling einbauen.
            Danke noch mal für den Augenöffner :+1: :dark_sunglasses:

            AlCalzoneA 1 Antwort Letzte Antwort
            0
            • MicM Mic

              @AlCalzone
              Super, vielen lieben Dank für die ausführliche Antwort :-)
              Ich habe jetzt zunächst deine Option 2 umgesetzt.

              Dabei wurde mir bewusst, dass ich mich nie wirklich mit Callback, Promises und async und await beschäftigt hatte. Dabei ist dies wohl enorm wichtig. Ich habe daher gleich mal ein paar setTimeout() raus geworfen aus meinem Script, und stattdessen async/await eingebaut.

              Gerade setTimeout() war/ist echt eine schlechte Gewohnheit, die ich damals halt so aus Scriptvorlagen übernommen und so bislang durchgezogen hatte, also z.B. einfach mal 2 Sekunden mittels setTimeout() setzen, um zu "hoffen", dass dann die vorherige Funktion durchlaufen ist.

              Ich werde nun nach und nach all meine Scripts auf callback und async/await umstellen. Damit kann ich auch ein deutlich besseres Errorhandling einbauen.
              Danke noch mal für den Augenöffner :+1: :dark_sunglasses:

              AlCalzoneA Offline
              AlCalzoneA Offline
              AlCalzone
              Developer
              schrieb am zuletzt editiert von
              #6

              @Mic sagte in Gelöst: JS: Wie erst nach File-Erstellung weiter?:

              einfach mal 2 Sekunden mittels setTimeout() setzen, um zu "hoffen", dass dann die vorherige Funktion durchlaufen ist.

              :scream:

              Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

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


              Support us

              ioBroker
              Community Adapters
              Donate

              960

              Online

              32.4k

              Benutzer

              81.5k

              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