异步承诺在两次启动之间有延迟
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-map
或 p-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);
我需要使用 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-map
或 p-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);