0
如果ws.send引發下面的代碼的異常,我想確保我停止遞歸發送並且客戶端線程結束。如何處理遞歸setTimeout模式中的異常
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的做到這一點。
但newAlarm不再是一個純函數。 – Baz
你可以在你的循環中放一個try-catch到'f()'並在catch中調用'clearTimeout(timer)'?它適用於我嘗試過的玩具例子。我在我的答案中更新了代碼。 – SilentLupin
這個作品,我更喜歡你的第一個答案,謝謝! – Baz