如果ws.send为下面的代码抛出异常,我想确保我停止递归发送并且客户端线程结束。
function newAlarm(ws)
{
ws.send(alarm);
}
function loop(f,t)
{
setTimeout(() => loop(f,t), t);
f();
}
loop(() => newAlarm(ws),10000);
我理解为了捕获ws.send
的错误,我会执行以下操作:ws.send(alarm, err => {if(!err){...}})
但我无法弄清楚如何为setTimeout执行此操作。
答案 0 :(得分:2)
尝试添加变量来保存计时器,然后在需要时将其清除。
function newAlarm(ws)
{
ws.send(alarm);
}
function loop(f,t)
{
var timer = setTimeout(() => loop(f,t), t);
try{
f();
}
catch{
clearTimeout(timer);
}
}
loop(() => newAlarm(ws),10000);