当任务按计划花费更长的时间时,我试图使循环的延迟更长。
当前,我在循环中使用此代码:
async function doSomeStuff() {
// do some stuff
// sometimes this action may take longer than 5 seconds
// after finishing wait 5 seconds
console.log('task completed, waiting 5 seconds for next run...');
}
setInterval(doSomeStuff, 5000);
的工作原理很像,但即使任务按计划花费了更长的时间,延迟也固定为5秒,因此有时新循环在完成最后一个循环后仅1秒钟开始,而不是等待5秒钟。
不幸的是,我无法通过查看其他问题来解决它。
感谢您的帮助。
最好的问候 佩达(Paedda)
答案 0 :(得分:3)
async
函数不应与忽略返回的承诺(例如setInterval
)的API一起使用,以防预期应链接承诺。
这可以通过递归async
函数来完成:
(async function doSomeStuff() {
await new Promise(resolve => setTimeout(resolve, 5000));
// do some stuff
await doSomeStuff();
})();
或无限循环:
(async function doSomeStuff() {
while (true) {
await new Promise(resolve => setTimeout(resolve, 5000));
// do some stuff
}
})();
如果需要处理错误,可以用try..catch
包裹功能主体。
答案 1 :(得分:0)
你快到了
async function doSomeStuff() {
// do some stuff
// sometimes this action may take longer than 5 seconds
// after finishing wait 5 seconds
console.log('task completed, waiting 5 seconds for next run...');
setTimeout(doSomeStuff, 5000);
}