NEWS
Asynchrone Funktionen innerhalb eine Subscribtion aufrufen
-
@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 -
@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 gehtIch 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(); -
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();@ben1983
Ich vermute viel eher das das ergebnis vorher undefinied war und damit false, jetzt ist es ein Object und damit true. -
@ben1983
Ich vermute viel eher das das ergebnis vorher undefinied war und damit false, jetzt ist es ein Object und damit true. -
@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@ben1983
Naja wenns geht gut, ich hätte es mit Klassen für Funktionen und Json für Konstanten gelöst :) -
@ben1983
Naja wenns geht gut, ich hätte es mit Klassen für Funktionen und Json für Konstanten gelöst :) -
@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"
-
@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"
-
@ben1983
Glaube nicht das json oder klassen pauschal einen Vorteil haben. Hängt von den Umständen ab und persönlichen Vorlieben. -
@ben1983
Glaube nicht das json oder klassen pauschal einen Vorteil haben. Hängt von den Umständen ab und persönlichen Vorlieben. -
@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.
@ben1983
Du benutzt ein Json. Ich wollte damit sagen das weder deine Art, noch meine Art nicht pauschal besser sind.
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