使用 setInterval 进行异步等待

新手上路,请多包涵
function first(){
  console.log('first')
}
function second(){
  console.log('second')
}
let interval = async ()=>{
  await setInterval(first,2000)
  await setInterval(second,2000)
}
interval();

想象一下我上面有这段代码。

当我运行它时,会同时调用 first()second() ;如何调用 second()first)() 返回一些数据后,例如,如果 first() 完成了,那么只有调用 second()

因为 first() 在我的代码中将处理大量数据,如果这两个函数同时调用,服务器将很难。

我如何调用 second() 每次 first() 会返回一些数据?

原文由 Andrey Radkevich 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 738
1 个回答

查看了所有答案,但仍然没有找到正确的答案,可以完全按照 OP 的要求工作。这是我用于相同目的的:

 async function waitInterval(callback, ms) {
    return new Promise(resolve => {
        let iteration = 0;
        const interval = setInterval(async () => {
            if (await callback(iteration, interval)) {
                resolve();
                clearInterval(interval);
            }
            iteration++;
        }, ms);
    });
}

function first(i) {
    console.log(`first: ${i}`);
    // If the condition below is true the timer finishes
    return i === 5;
}

function second(i) {
    console.log(`second: ${i}`);
    // If the condition below is true the timer finishes
    return i === 5;
}

(async () => {
    console.log('start');
    await waitInterval(first, 1000);
    await waitInterval(second, 1000);
    console.log('finish');
})()

在我的示例中,我还放置了间隔迭代计数和计时器本身,以防调用者需要对其进行处理。然而,这不是必需的

原文由 Ilya Matsuev 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题