Node.js 如何在递归setTimeout模式中处理异常
如果ws.send引发下面代码的异常,我希望确保停止递归发送,并且客户端线程结束Node.js 如何在递归setTimeout模式中处理异常,node.js,Node.js,如果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
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执行此操作。尝试添加一个变量来保存计时器,然后在希望计时器停止时清除它
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);
尝试添加一个变量来保存计时器,然后在希望计时器停止时清除它
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);
但是newAlarm不再是一个纯粹的函数。你能在循环中的
f()
周围放置一个try catch,并在catch中调用clearTimeout(timer)
吗?我试过一个玩具的例子。我更新了答案中的代码。这很有效,我更喜欢它,而不是你的第一个答案,谢谢!但是newAlarm不再是一个纯粹的函数。你能在循环中的f()
周围放置一个try catch,并在catch中调用clearTimeout(timer)
吗?我试过一个玩具的例子。我更新了答案中的代码。这很有效,我更喜欢它,而不是你的第一个答案,谢谢!