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. Asynchrone Funktionen innerhalb eine Subscribtion aufrufen

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.2k

Asynchrone Funktionen innerhalb eine Subscribtion aufrufen

Geplant Angeheftet Gesperrt Verschoben JavaScript
22 Beiträge 2 Kommentatoren 661 Aufrufe 1 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 ticaki

    @ben1983
    Mach deine Bespiele bitte einfacher :)

    const test = {
        status: 'das geht',
        neee: () => this.status
    }
    log(test.neee())
    
    class test2  {
        status = 'das geht'
        neee = () => this.status
    
        constructor() {};
    }
    const testc = new test2();
    log(testc.neee())
    

    Ich bin mit scope jetzt nicht so firm, aber ein Json hat doch kein this oder? EDIT: ok this hat es das scheint aber nur bei Konstanten zu funktionieren.

    13:28:20.430	info	javascript.0 (651) Start javascript script.js.Test.Skript_122
    13:28:20.433	info	javascript.0 (651) script.js.Test.Skript_122: undefined
    13:28:20.433	info	javascript.0 (651) script.js.Test.Skript_122: das geht
    
    Ben1983B Offline
    Ben1983B Offline
    Ben1983
    schrieb am zuletzt editiert von
    #13

    Ich scheine es gefunden zu haben.
    Es war wieder mal, dass ich true oder false zurückgegeben habe, kein Objekt. :-(

    so geht es (Haben ein Objekt mit result zurückgegeben)

    const automatikfreigabe = {
        beleuchtung: {
            aktiv: false,
            bypass: false,
            checkRelease: async function(kinderSindDa){
                try{
                    //Zeit in Bereich zuweisen
                    const timeOK = await messageToAsync("TimeAfterOrEqualNow",{time:this.zeitAbendsWennKinderDa},{timeout:5000});
                    return {result:(this.aktiv &&
                    // Entweder der Bypass ist gesetzt
                            (this.bypass ||
                    // Oder der Zustand wurde schon gesetzt
                            (this.zustand &&
                            (!kinderSindDa || timeOK.result))))};  
                }
                catch(error){
                    log(error);
                }
            },
        }
    }
    
    async function test(){
        log("start")
        try{
            if(await automatikfreigabe.beleuchtung.checkRelease(true)){
                log("Mitte")
            }
        }
        catch(error){
            log(error);
        }
        log("Ende");
    };
    
    test();
    
    
    
    
    
    
    
    
    
    
    
    
    T 1 Antwort Letzte Antwort
    0
    • Ben1983B Ben1983

      Ich scheine es gefunden zu haben.
      Es war wieder mal, dass ich true oder false zurückgegeben habe, kein Objekt. :-(

      so geht es (Haben ein Objekt mit result zurückgegeben)

      const automatikfreigabe = {
          beleuchtung: {
              aktiv: false,
              bypass: false,
              checkRelease: async function(kinderSindDa){
                  try{
                      //Zeit in Bereich zuweisen
                      const timeOK = await messageToAsync("TimeAfterOrEqualNow",{time:this.zeitAbendsWennKinderDa},{timeout:5000});
                      return {result:(this.aktiv &&
                      // Entweder der Bypass ist gesetzt
                              (this.bypass ||
                      // Oder der Zustand wurde schon gesetzt
                              (this.zustand &&
                              (!kinderSindDa || timeOK.result))))};  
                  }
                  catch(error){
                      log(error);
                  }
              },
          }
      }
      
      async function test(){
          log("start")
          try{
              if(await automatikfreigabe.beleuchtung.checkRelease(true)){
                  log("Mitte")
              }
          }
          catch(error){
              log(error);
          }
          log("Ende");
      };
      
      test();
      
      
      
      
      
      
      
      
      
      
      
      
      T Offline
      T Offline
      ticaki
      schrieb am zuletzt editiert von ticaki
      #14

      @ben1983
      Ich vermute viel eher das das ergebnis vorher undefinied war und damit false, jetzt ist es ein Object und damit true.

      Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

      Spenden

      Ben1983B 1 Antwort Letzte Antwort
      0
      • T ticaki

        @ben1983
        Ich vermute viel eher das das ergebnis vorher undefinied war und damit false, jetzt ist es ein Object und damit true.

        Ben1983B Offline
        Ben1983B Offline
        Ben1983
        schrieb am zuletzt editiert von
        #15

        @ticaki ok. Verstehe trotzdem nicht, warum es nicht geht.
        Nein, denn ein direkter log der Ergebnisses nach dem Aufruf führte zu nichts.
        Naja jetzt geht es jedefalls

        T 1 Antwort Letzte Antwort
        0
        • Ben1983B Ben1983

          @ticaki ok. Verstehe trotzdem nicht, warum es nicht geht.
          Nein, denn ein direkter log der Ergebnisses nach dem Aufruf führte zu nichts.
          Naja jetzt geht es jedefalls

          T Offline
          T Offline
          ticaki
          schrieb am zuletzt editiert von
          #16

          @ben1983
          Naja wenns geht gut, ich hätte es mit Klassen für Funktionen und Json für Konstanten gelöst :)

          Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

          Spenden

          Ben1983B 1 Antwort Letzte Antwort
          0
          • T ticaki

            @ben1983
            Naja wenns geht gut, ich hätte es mit Klassen für Funktionen und Json für Konstanten gelöst :)

            Ben1983B Offline
            Ben1983B Offline
            Ben1983
            schrieb am zuletzt editiert von
            #17

            @ticaki ???? Wie meinst Du das?

            T 1 Antwort Letzte Antwort
            0
            • Ben1983B Ben1983

              @ticaki ???? Wie meinst Du das?

              T Offline
              T Offline
              ticaki
              schrieb am zuletzt editiert von ticaki
              #18

              @ben1983
              Ist schlecht ein Beispiel zu erstellen, da der Vorteil ja erst bei Gemeinsamkeiten zum Tragen kommt aber sowas z.B.:

              // Prüfen,ob die angegebenen Zeit vor oder gleich der aktuellen ist
              onMessage("TimeBeforeOrEqualNow",(messagedata,callback) => {
                  const now=new Date();
                  const inputTime=new Date(`${now.getFullYear()}-${now.getMonth()+1}-${now.getDate()}-${messagedata.time}`);
                  if (inputTime) {
                      callback({ result: inputTime<=now });
                  }
                  else {
                      callback({ result: false });
                  }
              });
              
              const automatikfreigabe={
                  beleuchtung: {
                      aktiv: idAutomatikfreigabeBeleuchtungAktiv,
                      bypass: idAutomatikfreigabeBeleuchtungBypass,
                      zustand: idAutomatikfreigabeBeleuchtungZustand,
                      kinderSindDa: idAutomatikfreigabeBeleuchtungKidnerSindDa,
                      zeitAbendsWennKinderDa: gidAutomatikfreigabeBeleuchtungZeitAbendsWennKinderDaSind,
              
                  },
              }
              
              var beleuchtung=null;
              class Beleuchtung {
                  options={};
                  dpOptions = {};
                  // kein async für constructor möglich
                  constructor(options) {
                      for (const a in options) {
                          if (options[a]) this.dpOptions[a]=options[a];
                      }
                  }
                  async updateDp() {
                      for (const a in this.dpOptions[a]) {
                          this.options[a]=getState(this.dpOptions[a]).val;
                      }
                  }
                  async checkRelease(kinderSindDa) {
                      // Es muss die Automatikfreigabe aktiv sein
                      try {
                          const result=this.options.aktiv&&
                              // Entweder der Bypass ist gesetzt
                              (this.options.bypass||
                                  // Oder der Zustand wurde schon gesetzt
                                  (this.options.zustand&&
                                      (!kinderSindDa||(await messageToAsync("TimeAfterOrEqualNow",{ time: "21:30" },{ timeout: 5000 })).result)));
                      } catch (e) {
                          log(e)
                          result={};
                      }
                      return result;
                  }
              }
              
              async function main() {
                  beleuchtung=new Beleuchtung(automatikfreigabe.beleuchtung);
                  await beleuchtung.updateDp()
                  log(JSON.stringify(await beleuchtung.checkRelease(true)));
              }
              

              habs auch nicht getestet, ist mehr ein "Muster"

              Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

              Spenden

              Ben1983B 1 Antwort Letzte Antwort
              0
              • T ticaki

                @ben1983
                Ist schlecht ein Beispiel zu erstellen, da der Vorteil ja erst bei Gemeinsamkeiten zum Tragen kommt aber sowas z.B.:

                // Prüfen,ob die angegebenen Zeit vor oder gleich der aktuellen ist
                onMessage("TimeBeforeOrEqualNow",(messagedata,callback) => {
                    const now=new Date();
                    const inputTime=new Date(`${now.getFullYear()}-${now.getMonth()+1}-${now.getDate()}-${messagedata.time}`);
                    if (inputTime) {
                        callback({ result: inputTime<=now });
                    }
                    else {
                        callback({ result: false });
                    }
                });
                
                const automatikfreigabe={
                    beleuchtung: {
                        aktiv: idAutomatikfreigabeBeleuchtungAktiv,
                        bypass: idAutomatikfreigabeBeleuchtungBypass,
                        zustand: idAutomatikfreigabeBeleuchtungZustand,
                        kinderSindDa: idAutomatikfreigabeBeleuchtungKidnerSindDa,
                        zeitAbendsWennKinderDa: gidAutomatikfreigabeBeleuchtungZeitAbendsWennKinderDaSind,
                
                    },
                }
                
                var beleuchtung=null;
                class Beleuchtung {
                    options={};
                    dpOptions = {};
                    // kein async für constructor möglich
                    constructor(options) {
                        for (const a in options) {
                            if (options[a]) this.dpOptions[a]=options[a];
                        }
                    }
                    async updateDp() {
                        for (const a in this.dpOptions[a]) {
                            this.options[a]=getState(this.dpOptions[a]).val;
                        }
                    }
                    async checkRelease(kinderSindDa) {
                        // Es muss die Automatikfreigabe aktiv sein
                        try {
                            const result=this.options.aktiv&&
                                // Entweder der Bypass ist gesetzt
                                (this.options.bypass||
                                    // Oder der Zustand wurde schon gesetzt
                                    (this.options.zustand&&
                                        (!kinderSindDa||(await messageToAsync("TimeAfterOrEqualNow",{ time: "21:30" },{ timeout: 5000 })).result)));
                        } catch (e) {
                            log(e)
                            result={};
                        }
                        return result;
                    }
                }
                
                async function main() {
                    beleuchtung=new Beleuchtung(automatikfreigabe.beleuchtung);
                    await beleuchtung.updateDp()
                    log(JSON.stringify(await beleuchtung.checkRelease(true)));
                }
                

                habs auch nicht getestet, ist mehr ein "Muster"

                Ben1983B Offline
                Ben1983B Offline
                Ben1983
                schrieb am zuletzt editiert von
                #19

                @ticaki ok.
                Erkenne jetzt nicht grad ein Vorteil, aber ok

                T 1 Antwort Letzte Antwort
                0
                • Ben1983B Ben1983

                  @ticaki ok.
                  Erkenne jetzt nicht grad ein Vorteil, aber ok

                  T Offline
                  T Offline
                  ticaki
                  schrieb am zuletzt editiert von ticaki
                  #20

                  @ben1983
                  Glaube nicht das json oder klassen pauschal einen Vorteil haben. Hängt von den Umständen ab und persönlichen Vorlieben.

                  Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                  Spenden

                  Ben1983B 1 Antwort Letzte Antwort
                  0
                  • T ticaki

                    @ben1983
                    Glaube nicht das json oder klassen pauschal einen Vorteil haben. Hängt von den Umständen ab und persönlichen Vorlieben.

                    Ben1983B Offline
                    Ben1983B Offline
                    Ben1983
                    schrieb am zuletzt editiert von
                    #21

                    @ticaki ok. Aber ist das Objekt bei mir kein JSON? Ist doch das gleiche, oder übersehe ich was? Ist halt nur noch die Funktion direkt drin.

                    T 1 Antwort Letzte Antwort
                    0
                    • Ben1983B Ben1983

                      @ticaki ok. Aber ist das Objekt bei mir kein JSON? Ist doch das gleiche, oder übersehe ich was? Ist halt nur noch die Funktion direkt drin.

                      T Offline
                      T Offline
                      ticaki
                      schrieb am zuletzt editiert von
                      #22

                      @ben1983
                      Du benutzt ein Json. Ich wollte damit sagen das weder deine Art, noch meine Art nicht pauschal besser sind.

                      Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                      Spenden

                      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

                      497

                      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