延迟执行异步函数数组,节点js

时间:2020-06-11 08:41:26

标签: node.js async-await

const filesToTranslate = await getFilesToTranslate();
await Promise.all(filesToTranslate.map(async item => {
  doExtraction(item)
}));

我想每30秒执行一次doExtraction,以免服务器阻塞。

有那么聪明吗?

1 个答案:

答案 0 :(得分:2)

您可以使用超时:

const filesToTranslate = await getFilesToTranslate();
for (const item of filesToTranslate) {
    await new Promise(resolve => setTimeout(resolve, 30000));
    doExtraction(item);
}

在循环内使用await将暂停迭代,直到Promise解决为止。


如果您希望第一个doExtraction立即执行:

const filesToTranslate = await getFilesToTranslate();
for (const item of filesToTranslate) {
    doExtraction(item);
    if (filesToTranslate.Slice(-1) !== item) {
        await new Promise(resolve => setTimeout(resolve, 30000));
    }
}