Grässlicher Code, sorry.
Das Wichtigste zuerst:
Immer wenn auf eine Objekt-Komponente zugegriffen wird, könnte sich ein Fehler ereignen, der zum Skriptabbruch führt.
Beispiel:
let x = a.b.c; // a sei ein Objekt mit erwartungsgemäß vorhandener Komponente b, die erwartungsgemäß Komponente c enthält.
Wenn a oder a.b nicht existiert (undefined), kommt es zum Skriptabbruch.
Gegenmaßnahme:
let x;
if(a.b.c!==undefined) x = a.b.c;
oder
if(a.b.c===undefined) return;
x = a.b.c;
Baue bei jedem lesenden Zugriff diese Sicherheitsabfrage ein!
Btw, wenn a.b.c undefined ist, kommt es an dieser Stelle nicht zum Skriptabbruch, aber bei einer Weiterverarbeitung kann es dazu kommen
Bin mir nicht ganz sicher. Evtl. ist eine noch aufwändigere Abfrage zielführend.
if(a===undefined | | a.b===undefined | | a.b.c===undefined) return; // | | ist das logische ODER, das Leerzeichen dazwischen ist zwecks Vermeidung eines Smileys erforderlich.
...
Logische Verknüpfungen werden i.d.R., hier immer, per Kurzschluss gewertet, d.h. sobald das Resultat der Verknüpfung feststeht, wird nicht weiter gewertet.
Hier: Wenn a.b undefined ist, wird a.b.c nicht mehr auf undefined geprüft.
Wenn du verstanden hast, wirst du den Code selbst verbessern können.
Unwichtig, aber zum verschlanken des Codes geeignet:
Du brauchst beim Verketten mit einem String einen numerischen Wert nicht per JSON.stringify in einen String zu verwandeln. Das tut der Interpreter alleine, weil der Operator + bei bereits einem String-Operanden als Verkettungsoperator interpretiert wird.
Unsinnig, auch wenn oft zu finden:
Als user defined parameter ein null zu übergeben ist stereotypischer Bullshit. Nimm solchen Quatsch heraus!
Wozu soll die Variable alertTimer gut sein?
Diese wäre erforderlich, wenn im Skript irgendwo der Timer gelöscht (Timer.clear(alertTimer)) werden soll. Auch das ist stereotypischer Unsinn, weil überflüssig.
myunixdayint = result.unixtime / 86400 | 0;
Mir erschließt sich nicht, was die bitweise ODER Verknüpfung mit 0 bewirken soll. x | 0 ergibt immer x.
Vielleicht ist das ein tricky Ausdruck zur Umwandlung in einen Integer-Wert?
Dazu sind Math.round(), Math.ceil() und Math.floor() vorgesehen.
Es gibt noch mehr, ich will es hier aber mal so belassen.
Ein kürzeres Skript ist übersichtlicher und leichter zu pflegen. 