NEWS
[gelöst] Kann ein Callback nur einmal aufgerufen werden?
-
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"
-
@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.
-
@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?
-
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
-
@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.