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"
-
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: zweider Callback wird wohl erst ausgeführt wenn die Funktion beendet ist.
-
@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: zweider 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?
-
@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 :)
-
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.
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden