每 n 秒运行一次异步函数,如果异步函数花费的时间超过 n 秒,则等待

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


async function update(){

    await wait_for_response();

}

setInterval(update, 1000);

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


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


是否有简单的内置方法或标准做法来实现这一点?


幕布斯7119047
浏览 201回答 2
2回答

侃侃尔雅

我认为setTimeout在这种情况下这将是一个更好的选择:async function update() {     const t1 = new Date();     await wait_for_response();     setTimeout(update, Math.max(0, 1000 - new Date + t1));}update();

白板的微信

这个使用承诺链的简单构造可以为您处理:let lastPromise = Promise.resolve();function update() {  lastPromise = lastPromise.then(wait_for_response, wait_for_response);}setInterval(update, 1000);如果我们担心链无限增长,我们可以使用这个版本:let lastPromise = Promise.resolve();function update() {  const p = lastPromise;  function cleanup() {    if (lastPromise === p) {       lastPromise = Promise.resolve();    }  }  lastPromise = lastPromise    .then(wait_for_response, wait_for_response)    .then(cleanup, cleanup);}setInterval(update, 1000);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript