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. Sleep bei Ereignis unterbrechen

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.3k

Sleep bei Ereignis unterbrechen

Geplant Angeheftet Gesperrt Verschoben JavaScript
3 Beiträge 2 Kommentatoren 122 Aufrufe 2 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.
  • W Offline
    W Offline
    warhammer73
    schrieb am zuletzt editiert von
    #1

    Hallo,

    ich habe eine Schleife die regelmässig nach Änderungen sucht (Nicht nur in Datenpunkten) und dann für einen Zeitraum schläft.

    Das tut sie mit der Funktion

    function sleep(ms) {
      return new Promise(resolve => setTimeout(resolve, ms * 1000));
    }
    

    auch ganz gut.

    Im Script gibts zum schlafenlegen dann passend

    await sleep(300);
    

    Nun soll das schlafen aber bei bestimmten Ereignissen per on({id: ... unterbrochen werden.
    Bekomme ich das irgendwie hin?

    haus-automatisierungH 1 Antwort Letzte Antwort
    0
    • W warhammer73

      Hallo,

      ich habe eine Schleife die regelmässig nach Änderungen sucht (Nicht nur in Datenpunkten) und dann für einen Zeitraum schläft.

      Das tut sie mit der Funktion

      function sleep(ms) {
        return new Promise(resolve => setTimeout(resolve, ms * 1000));
      }
      

      auch ganz gut.

      Im Script gibts zum schlafenlegen dann passend

      await sleep(300);
      

      Nun soll das schlafen aber bei bestimmten Ereignissen per on({id: ... unterbrochen werden.
      Bekomme ich das irgendwie hin?

      haus-automatisierungH Online
      haus-automatisierungH Online
      haus-automatisierung
      Developer Most Active
      schrieb am zuletzt editiert von
      #2

      @warhammer73 sagte in Sleep bei Ereignis unterbrechen:

      Bekomme ich das irgendwie hin?

      Man könnte noch mit Events arbeiten und wenn das Event gefeuert wird, dann clearTimeout + ebenfalls resolve aufrufen.

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

      haus-automatisierungH 1 Antwort Letzte Antwort
      0
      • haus-automatisierungH haus-automatisierung

        @warhammer73 sagte in Sleep bei Ereignis unterbrechen:

        Bekomme ich das irgendwie hin?

        Man könnte noch mit Events arbeiten und wenn das Event gefeuert wird, dann clearTimeout + ebenfalls resolve aufrufen.

        haus-automatisierungH Online
        haus-automatisierungH Online
        haus-automatisierung
        Developer Most Active
        schrieb am zuletzt editiert von haus-automatisierung
        #3

        Beispiel (ungetestet):

        const EventEmitter = require('events');
        
        const eventEmitter = new EventEmitter();
        
        async function sleep(ms) {
          return new Promise(resolve => {
            const timeout = setTimeout(resolve, ms * 1000);
        
            eventEmitter.on('cancel', () => {
              clearTimeout(timeout);
              resolve();
            });
          });
        }
        
        on({ id: ...}, () => {
          eventEmitter.emit('cancel');
        });
        

        Eventuell wäre es schlauer mit .once() und/oder .removeAllListeners() zu arbeiten. Aber einfach mal rumspielen. Reicht das als Denkanstoß?

        const EventEmitter = require('events');
        
        const eventEmitter = new EventEmitter();
        
        async function sleep(ms) {
          return new Promise(resolve => {
            let timeout = undefined;
        
            timeout = setTimeout(() => {
              timeout = undefined;
              eventEmitter.removeAllListeners('cancel');
        
              resolve();
            }, ms * 1000);
        
            eventEmitter.once('cancel', () => {
              if (timeout) {
                clearTimeout(timeout);
              }
        
              resolve();
            });
          });
        }
        
        on({ id: ...}, () => {
          eventEmitter.emit('cancel');
        });
        

        🧑‍🎓 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

        671

        Online

        32.6k

        Benutzer

        82.3k

        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