如何处理递归setTimeout模式中的异常

时间:2016-09-22 18:51:46

标签: 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){...}})但我无法弄清楚如何为setTimeout执行此操作。

1 个答案:

答案 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);