NEWS
[gelöst] async/await auch im on() ?
-
Ich beziehe mich auf diesen Post.
Mein Frage, kann ich die Async-Funktionen auch im on() verwenden oder geht das (noch) nicht? -
@ente34 sagte in async/await auch im on() ?:
Ich beziehe mich auf diesen Post.
Mein Frage, kann ich die Async-Funktionen auch im on() verwenden oder geht das (noch) nicht?ja, hier ein etwas sinnfreies Beispiel
const idState = '0_userdata.0.example_state'; on(idState, async function(obj) { await wait(100); log(obj.state.val); }) // oder on(idState, async (obj) => { await wait(100); log(obj.state.val); })
-
@fastfoot Einfach bedenken: du solltest immer den gesamten Inhalt der asynchronen Funktion, die du als Callback verwendest, in ein
try ... catch
schreiben, da eine Exception dort sonst zumindest das ganze Skript, wenn nicht den ganzen Adapter abstürzen lässt.Also sowas:
on(idState, async (obj) => { try { await wait(100); log(obj.state.val); } catch (e) { log('Got an error: ' + e); } })
-
-
@unclesam sagte in async/await auch im on() ?:
@fastfoot Einfach bedenken: du solltest immer den gesamten Inhalt der asynchronen Funktion, die du als Callback verwendest, in ein
try ... catch
schreiben, da eine Exception dort sonst zumindest das ganze Skript, wenn nicht den ganzen Adapter abstürzen lässt.Also sowas:
on(idState, async (obj) => { try { await wait(100); log(obj.state.val); } catch (e) { log('Got an error: ' + e); } })
mhhmm, vielen Dank für den Hinweis! Aber würde/sollte man das tatsächlich auch in einem so einfachen Beispiel machen? Ich hätte eher gedacht dass man das macht wenn man ein JSON.parse() oder ähnliches anwendet. Und weil ich es gerne genau wissen möchte, gilt das dann auch für 'normale' callbacks ohne async, also
on(id,(obj)=>{})
? Bisher habe ich mir das immer erspart, zumindest wenn ich keinen Fehler erwartet habe, so wie im Beispiel. Aber ich lerne gerne dazu und bin deshalb für solche Hinweise sehr dankbar -
@unclesam
Das mit der Fehlerbehandlung stimmt, ohne reisst es den ganzen adapter runter, schon ausprobiert ... -
@fastfoot sagte in [gelöst] async/await auch im on() ?:
Aber würde/sollte man das tatsächlich auch in einem so einfachen Beispiel machen?
Nein, natürlich nicht für ein "log", aber meistens macht man ja mehr als nur das in einem on-Handler. Und @ente34 schreibt es oben ja schon: es lohnt sich, immer ein try...catch rein zu tun.
Und weil ich es gerne genau wissen möchte, gilt das dann auch für 'normale' callbacks ohne async, also on(id,(obj)=>{}) ?
Ja, da ist es tatsächlich kein Problem da diese Exception abgefangen und geloggt wird. Aber eine "unhandled promise rejection", wie das heisst, kann leider nicht abgefangen werden.
-
@unclesam sagte in [gelöst] async/await auch im on() ?:
Nein, natürlich nicht für ein "log", aber meistens macht man ja mehr als nur das in einem on-Handler.
ah, dann hatte ich deinen Tipp schon richtig eingeordnet
Und @ente34 schreibt es oben ja schon: es lohnt sich, immer ein try...catch rein zu tun.
ja, Fehlerbehandlung wird gerne vernachlässigt, auch von mir Meist baue ich sie erst ein, wenn ein Fehler schon eingetreten war und ich so darauf aufmerksam wurde. Da ist sicher noch Luft nach oben, Beiträge wie deiner helfen da sehr!
Und weil ich es gerne genau wissen möchte, gilt das dann auch für 'normale' callbacks ohne async, also on(id,(obj)=>{}) ?
Ja, da ist es tatsächlich kein Problem da diese Exception abgefangen und geloggt wird. Aber eine "unhandled promise rejection", wie das heisst, kann leider nicht abgefangen werden.
vor Grundlagen zu Promises habe ich mich bisher 'gedrückt', auch weil deren Handling durch die neuen iobroker xyzAsync Funktionen super easy scheint und auch ist. JS ist schon nicht einfach, ich sollte doch noch etwas erweiterte Grundlagen lernen
Nochmals Danke für deine Erläuterungen!
-
@fastfoot sagte in [gelöst] async/await auch im on() ?:
vor Grundlagen zu Promises habe ich mich bisher 'gedrückt', auch weil deren Handling durch die neuen iobroker xyzAsync Funktionen super easy scheint und auch ist. JS ist schon nicht einfach, ich sollte doch noch etwas erweiterte Grundlagen lernen
Schau dir diese gute Erklärung von unserem AlCalzone mal an:
https://gist.github.com/AlCalzone/d14b854b69ce5e8a03718336cc650a95 -
@unclesam sagte in [gelöst] async/await auch im on() ?:
Schau dir diese gute Erklärung von unserem AlCalzone mal an:
Danke dir, die kannte ich schon und habe sie jetzt schon zwei- dreimal durch, aber lerne jedes mal etwas. Evtl. sollte ich die Beispiele mal mit konkretem Code beleben, so lerne ich halt am Besten. Gegen Ende schwirrt mir immer der Kopf Verstanden habe ich es, aber um das zu verinnerlichen muss ich noch viel programmieren und üben