Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [gelöst] Kann ein Callback nur einmal aufgerufen werden?

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [gelöst] Kann ein Callback nur einmal aufgerufen werden?

    This topic has been deleted. Only users with topic management privileges can see it.
    • Ben1983
      Ben1983 last edited by Ben1983

      Hallo, ich habe einen messageTo Aufruf wie folgt:

      messageTo("QAlexaLichtInGarageAus",data,{timeout: data.timeout},(dp)=>{
                      if(dp){
                          $(selector).setState(false);
                      } 
                  });
      

      ist es jetzt richtig, dass ich den mitgesendeten callback nur genau 1 mal aufrufen kann?
      also ich kann diesen nicht bspw. so aufrufen:

      callback(false);
      setTimeout(()=>{
           callback(true);
      },2000);
      

      Beispiel 2.

      onMessage('testcallback', (data,callback) =>{
          callback("Aufruf");
              callback("zwei");
                  callback("drei");
      });
      
      messageTo("testcallback",1,(dp)=>{
          log(dp)
      });
      

      Ausgabe im log... lediglich "Aufruf"

      T 1 Reply Last reply Reply Quote 0
      • T
        ticaki Developer @Ben1983 last edited by

        @ben1983
        hat mich interessiert, verhält sich bei mir genauso.

        onMessage('testcallback', (data,callback) =>{
            setTimeout(async function(callback) {
                const a = await callback("zwei");
                log(a)
                await callback("drei");
            }, 1000, callback)
        });
         
        messageTo("testcallback",1,calltest);
        
        async function calltest (a) {
            log(a)
            return 250
        }
        

        ergibt:

        22:25:49.067	info	javascript.0 (7123) script.js.Test.Skript_1: registered 0 subscriptions, 0 schedules, 1 message, 0 logs and 0 file subscriptions
        22:25:50.075	info	javascript.0 (7123) script.js.Test.Skript_1: undefined
        22:25:50.078	info	javascript.0 (7123) script.js.Test.Skript_1: zwei
        

        der Callback wird wohl erst ausgeführt wenn die Funktion beendet ist.

        Ben1983 1 Reply Last reply Reply Quote 0
        • Ben1983
          Ben1983 @ticaki last edited by

          @ticaki ja ich habe ihn schon lange verzögert, aber irgendwie wird er nur einmal aufgerufen.
          Ist ja wie bei Dir, dass "drei" nicht aufgerufen wird.

          Ps. was bewirkt denn der Eintrag callback hinter den 1000 bei Dir? Das ist doch ein Parameter, der dem timeout übergeben wird, oder?

          T 1 Reply Last reply Reply Quote 0
          • T
            ticaki Developer @Ben1983 last edited by ticaki

            @ben1983

            PS

            Ja, ich hatte die Hoffnung das die Callbackreferenz kopiert wird und mehrfach aufgerufen werden kann, aber nö. Ist schon etwas her das ich das verwendet hatte, war irgendwie nicht praktisch.

            was geht ist:

            onMessage('testcallback', (data,callback) =>{
                let result = [{f:'log', data:['erstes', 'zweites']}]
                callback(result)
            });
             
            messageTo("testcallback",1,(dp)=>{
                dp.forEach((dp) => dp.data.forEach((d) =>getFunction(dp.f)(d)))
            });
            
            function getFunction(id) {
                switch (id) {
                    case 'log':
                    return log
                }
            }
            

            Da muß man aber getFunction in jedes Skript kopieren, oder es global machen. Dat war mir zu "Das raff ich in 3 Jahren doch eh nicht mehr" und habs anders gemacht. Mit Stats mach ich laufend was und da muß ich mich eigentlich nie nochmal einlesen 🙂

            Ben1983 1 Reply Last reply Reply Quote 0
            • Ben1983
              Ben1983 @ticaki last edited by

              @ticaki ja ich hatte es nur gemerkt, weil ich den Callback einmal aufgerufen hatte, dann hatte sich eien Bedingung geändert und ich hatte es so Programmiert, dass wenn die Bedingung sich ändert, der Callback nochmal mit anderen Paramtern aufgerufen wird.... das ging dann nicht.

              1 Reply Last reply Reply Quote 0
              • First post
                Last post

              Support us

              ioBroker
              Community Adapters
              Donate

              867
              Online

              31.7k
              Users

              79.8k
              Topics

              1.3m
              Posts

              2
              5
              186
              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