异步承诺在两次启动之间有延迟

Async promises with delay in between starts

我需要使用 Webpack 在 Jenkins 上构建几个包。在我的构建脚本中,我使用以下内容:

const builds = [];
packages.forEach(p => builds.push(buildWeb(p).catch(error => console.log(error))));
await Promise.all(builds);

对于每个包,都会执行一个 promise 以构建它。但是,Promise.all一次性执行了所有的promise,导致内存堆溢出。我试着一个一个地执行它们,效果很好,但我的同事要求执行以下操作:

启动第一个promise,等待10秒,异步启动运行第二个,再次等待10秒启动运行第三个,以此类推...

我已经用 setTimeout 试过了,但无法正常工作。

是否有等待执行动态承诺并在每个承诺开始之间有延迟?

检查 p-fun 库。有很多有用的包。具体来说,您可能对 p-mapp-queue.

感兴趣

我的建议是将 setTimeout 包装到一个 promise 本身中,并在 for 循环中使用 async/await。这是一个例子:

const delay = (duration) => {
    return new Promise(resolve => {
        setTimeout(() => resolve(), duration);
    });
}

const main = async () => {
    const builds = [];

    for (let p of packages) {
        builds.push(buildWeb(p).catch(error => console.log(error)))
        await delay(10000); // Wait for 10 seconds
    }

    await Promise.all(builds);    
}

main().catch(console.error);