NEWS
Frage zu async / Interval / Timeout
-
Mahlzeit zusammen!
Ich lerne gerade JS. Dabei bin ich in den Grundzügen. Ich vergleiche z.Zt. Blocklys mit dem entsprechenden Code in JS bzw. versuche das ganze danach komplett in JS zu schreiben. Für folgenden Code, der von Blockly nach JS übersetzt wurde, habe ich ein paar Fragen.
if ((obj.state ? obj.state.val : "")) { Wiederholen = setInterval(async function () { console.log('test'); }, 1000); Timer = setTimeout(async function () { (function () {if (Wiederholen) {clearInterval(Wiederholen); Wiederholen = null;}})(); }, 1000); }
1.)
Warum wird der Intervall in async geschrieben. Ich habe mal meine älternen Blocklys angeschaut, da sind die Intervalle / Timeouts ohne async. Welche Vorteile hat async function in diesem Fall?2.)
Der clear Interval ist in eine anonyme Funktion gebettet und in eine If Abfrage. Ohne beides würde der Intervall doch auch beendet werden. Wozu dann das ganze?3.) Der Intervall "Wiederholung" wird auf null gesetzt. Warum genau?
Vielen Dank schon mal für Eure Antworten!
Beste Grüße Karel
-
@Karel-Puhli sagte in Frage zu async / Interval / Timeout:
1.)
Warum wird der Intervall in async geschrieben. Ich habe mal meine älternen Blocklys angeschaut, da sind die Intervalle / Timeouts ohne async. Welche Vorteile hat async function in diesem Fall?Blockly schreibt immer Code, der auch komplexe Szenarien abdecken kann. In diesem Fall (es gibt kein
await
in der Funktion) ist dasasync
überflüssig.2.)
Der clear Interval ist in eine anonyme Funktion gebettet und in eine If Abfrage. Ohne beides würde der Intervall doch auch beendet werden. Wozu dann das ganze?Das mit der anonymen Funktion habe ich schon öfters gesehen, verstehe ich aber hier auch nicht.
Die
if
Anfrage ist da, falls das Intervall woanders gestoppt wird. Grundsätzlich ist das nicht nötig (ein Intervall kann gestoppt werden, wenn es schon nicht mehr läuft, das passiert nichts), aber es ist saubere Programmierung.3.) Der Intervall "Wiederholung" wird auf null gesetzt. Warum genau?
Ebenfalls wir oben erwähnt: damit wird sicher gestellt, dass
clearInterval
genau einmal aufgerufen wird. Zudem kann man an der Variable nun überprüfen, ob das Intervall noch läuft.Du scheinst dich schon etwas mit Programmiersprachen und Logik auszukennen; wenn du jetzt eine Sprache für ioBroker lernen willst, würde ich dir gleich TypeScript anstatt JavaScript empfehlen. Das ist noch etwas "logischer" und erlaubt dir starke Typenprüfung (JavaScript macht das zwar im Editor auch, aber es zwingt dich nicht dazu). Schlussendlich ist TypeScript einfach eine Erweiterung von JavaScript.
-
@Karel-Puhli sagte:
Welche Vorteile hat async function in diesem Fall?
Man kann in der Callback-Funktion await verwenden.
@Karel-Puhli sagte in Frage zu async / Interval / Timeout:
Der Intervall "Wiederholung" wird auf null gesetzt. Warum genau?
Man kann im Script prüfen, ob das Intervall läuft.
-
Danke Euch beiden schon mal für die Antworten! Ich denke, ich habe alles im Großen und Ganzen verstanden.
Mit der async ist man also flexibler, falls es zu komplexeren Vorgängen kommt. Habe bis jetzt schon mal im Netz nach async / await / promise usw gesucht. Auf leicht verständliche Tutorials / Anleitungen bin ich bis jetzt leider nicht gestoßen. Habt ihr diesbezüglich einen Tip?
Dass meine älteren Skripte kein async beinhalten liegt daran, dass in ioBroker async früher generell nicht verwendet wurde? Ich hatte nämlich das Gefühl, dass gerade die Intervals / Timeouts mit async zuverlässiger laufen.
TypeScipt lerne ich übrigens auch noch parallel. vielleicht befasse ich mich da auch wieder mehr mit.