Wenn ws.send eine Ausnahme für den folgenden Code auslöst, möchte ich sicherstellen, dass ich rekursiv abhöre und der Client-Thread endet.So behandeln Sie eine Ausnahme im rekursiven setTimeout-Muster
function newAlarm(ws)
{
ws.send(alarm);
}
function loop(f,t)
{
setTimeout(() => loop(f,t), t);
f();
}
loop(() => newAlarm(ws),10000);
Ich verstehe, dass für ws.send
den Fehler zu fangen, ich folgendes tun: ws.send(alarm, err => {if(!err){...}})
Aber ich kann nicht herausfinden, wie dies für setTimeout zu tun.
Aber newAlarm ist keine reine Funktion mehr. – Baz
Kannst du einen try-catch um 'f()' in deine Schleife setzen und 'clearTimeout (timer)' im Catch aufrufen? Es funktionierte für ein Spielzeugbeispiel, das ich versuchte. Ich habe den Code in meiner Antwort aktualisiert. – SilentLupin
Das funktioniert und ich bevorzuge es zu Ihrer ersten Antwort, danke! – Baz