如何解决异步承诺在启动之间有延迟
我需要使用Webpack在Jenkins上构建几个软件包。在我的构建脚本中,使用以下命令:
const builds = [];
packages.forEach(p => builds.push(buildWeb(p).catch(error => console.log(error))));
await Promise.all(builds);
对于每个包,都会执行一个promise来构建它。但是,Promise.all
一次执行所有的Promise,导致内存堆溢出。我尝试一次一个地执行它们,效果很好,但是我的同事要求实现以下内容:
启动第一个承诺,等待10秒钟,然后开始异步运行第二个承诺,再等待10秒钟,开始运行第三个承诺,依此类推...
我已经用setTimeout
尝试过,但是无法正常工作。
是否需要等待执行动态诺言,而每个诺言的开始之间会有延迟?
解决方法
我的建议是将setTimeout
包装成一个承诺,并在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);
,
检出p-fun
库。有很多有用的软件包。具体来说,您可能对p-map
或p-queue
感兴趣。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。