@paul: ich poste mal den aktuellen Stand, macht inzwischen denke ich wieder Sinn:
Eigentlich ist es nur ein "normaler Timeout-Block" der es ermöglicht einen funktionsaufruf zu verzoegern und dabei einen "dynamische" Bezeichnung hat, sodass das auch mit einem SelectorById-Trigger individuell in Blockly funktioniert.
Es funktioniert nun auch mit dem "Multi-Timeout"...
die drei functions - wie bekomme ich die erste davon ganz weg...?
// Beschreibe diese Funktion …
async function timeout_handles_obj() {
var timeout_handles = {};
/*
// timeout_handles auslesen aus dp, falls er nicht existiert, dann erstellen:
a = scriptName.split('.');
script_name = a.slice(-1)[0]; // Skriptname erfasst
dp = "0_userdata.0.System.Timeouts.in_Skript_" + script_name; // wo die Timeouts gebackupt werden
if ( !existsState(dp) ) {
createState(dp, timeout_handles, {
"name": "Timeout-Handles des Skripts",
"desc": "Manuell erzeugt",
"role": "state",
"type": "object",
"read": true,
"write": true
}, function () {});
}
else {
timeout_handles = getState(dp).val; // Timeout reinladen aus dp
}
console.log(getState(dp).val);
*/
return timeout_handles;
}
// Beschreibe diese Funktion …
async function timeout_loeschen(trigger) {
a = trigger.split('.');
b = a.slice(a.length - 2, a.length - 0);
trigger_id = b.join('_'); // trigger_id = "trigger" gekürzt
if( trigger_id in timeout_handles )
{
clearTimeout(timeout_handles[trigger_id]);
delete timeout_handles[trigger_id];
}
}
// Beschreibe diese Funktion …
async function timeout_setzen(trigger, sek, funktion) {
var obj = {};
//Name für den Timeout des Triggers erfassen:
a = trigger.split('.');
b = a.slice(a.length - 2, a.length - 0);
trigger_id = b.join('_'); // trigger_id = "trigger" gekürzt
verzoegerung_ms = sek * 1000; // umrechnen
obj[funktion] = funktion; // function in object zuordnen
//Timeout setzen
timeout_handles[trigger_id] = setTimeout(eval(obj[funktion]), verzoegerung_ms, trigger);
/*
// Skriptname erfassung und Timeouts backupen in DP:
a = scriptName.split('.');
script_name = a.slice(-1)[0];
dp= "0_userdata.0.System.Timeouts.in_Skript_" + script_name;
setState(dp, timeout_handles, true); // handles in dp backupen;
*/
}