Hallo Shelly Fans,
ich fange gerade erst mit dem Shelly Scripting an, bin aber schon länger mit Javascript vertraut.
Asynchronität war noch nie mein Lieblingsthema, aber wie geht man im Shelly Script am Besten vor, wenn es verschachtelte Calls gibt?
Mein Script, auf einem PlusI4 wird instabil (stoppt einfach ohne Fehlermeldung), wenn ich z.B. sowas mache:
Shelly.call("HTTP.GET",
{ url: "someShellyURL"},
function (res, error_code, error_msg, ud) {
if (res.code === 200) {
[do some evaluation and make decisions]
Shelly.call("HTTP.GET",
{ url: "someOtherShellyURL"},
function (res, error_code, error_msg, ud) {
if (res.code === 200) {
[do the magic]
}
},
null //userdata
);
};
},
null //userdata
);
Alles anzeigen
Die Idee ist natürlich asynchrone Aufrufe in eine Reihenfolge zu bringen. Dafür gibt es ja sonst Promises und ähnliche Konstrukte...
Warum mag mein PlusI4 das nicht und reagiert dem unkommentierten Stop des Scriptes? Folgendes scheint weniger Probleme zu machen:
Shelly.call("HTTP.GET",
{ url: "someShellyURL"},
function (res, error_code, error_msg, ud) {
if (res.code === 200) {
[do some evaluation and make decisions]
Shelly.call("HTTP.GET",
{ url: "someOtherShellyURL"},
null, /function
null //userdata
);
};
},
null //userdata
);
Alles anzeigen
Vielleicht gibt es also bei Variante eins auch Probleme mit den Scopes der Variablen (z.B. 'res') ...
Bin gespannt, ob auch andere diese "Abbruch-Probleme" haben und wie man das am Besten macht.