@bahnuhr said in async / await -> Muster Anleitung gesucht:
Habt ihr mal ein Muster mit diesem await, das halt wartet bis etwas erledigt ist, und dann zum nächsten await geht.
@htrecksler said in async / await -> Muster Anleitung gesucht:
Ich würde die await Funktion auch sehr gerne nutzen, habe mich aber noch nicht weiter damit beschäftigt.
Ich hatte auch einige Zeit gebraucht, um die async/await Logik zu verstehen
Oben hab ich schon mal versucht, zu erklären.
Weiteres Beispiel:
In einem Script will ich Datenpunkte anlegen, und danach diese auf Änderung überwachen. Die Überwachung auf Änderung soll aber nur stattfinden, nachdem die Datenpunkte angelegt sind, was mehrere Millisekunden dauern kann mit createState()
. Daher bietet sich hier super async/await an.
mainAsync();
async function mainAsync() {
try {
await createStateAsync('0_userdata.0._0_TEST.STATE_1', {name:'Test 1', type:'string', read:true, write:true, role:'state', def:'neu angelegt' });
await createStateAsync('0_userdata.0._0_TEST.STATE_2', {name:'Test 2', type:'boolean', read:false, write:true, role:'button', def:false })
// States erstellt, jetzt machen wir Subscribe
on({id: ['0_userdata.0._0_TEST.STATE_1', '0_userdata.0._0_TEST.STATE_2'], change:'any', ack:false}, async (obj) => {
log(`State '${obj.id}' changed to [${obj.state.val}]`)
});
} catch (error) {
dumpError(`[mainAsync()]`, error);
return false;
}
}
/**
* Error Message to Log. Handles error object being provided.
* @param {string} msg - (intro) message of the error
* @param {*} [error=undefined] - Optional: Error object or string
*/
function dumpError(msg, error=undefined) {
if (!error) {
console.error(msg);
} else {
if (typeof error === 'object') {
if (error.stack) {
log(`${msg} – ${error.stack}`, 'error');
} else if (error.message) {
log(`${msg} – ${error.message}`, 'error');
} else {
log(`${msg} – ${JSON.stringify(error)}`, 'error');
}
} else if (typeof error === 'string') {
log(`${msg} – ${error}`, 'error');
} else {
log(`[dumpError()] : wrong error argument: ${JSON.stringify(error)}`, 'error');
}
}
}