每n秒运行一次异步功能,如果异步功能花费的时间超过n秒,请等待

hed*_*g90 4 javascript node.js

我希望异步函数以每秒一次的最大速率运行。

async function update(){
    await wait_for_response();
}
setInterval(update, 1000);
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,如果函数花费的时间超过一秒钟,则下一次更新将在上一次完成之前开始。

如果update()花费的时间超过1秒,则我希望下一个更新要等到最后一个更新完成后才立即运行。

是否有一个简单的内置方法或标准实践来实现?

Luc*_*one 6

我认为setTimeout在这种情况下,这将是更好的选择:

async function update() {
     const t1 = new Date();
     await wait_for_response();
     setTimeout(update, Math.max(0, 1000 - new Date + t1));
}
update();
Run Code Online (Sandbox Code Playgroud)