【发布时间】:2021-09-29 12:02:17
【问题描述】:
我有大量数据要在数据库上创建,我想在并发限制的情况下并行生成它们。为此,我使用bluebird 中的Promise.map 方法并设置了concurrency 限制。但是,我还需要在其中一个承诺失败时立即停止执行链。
这是我当前的代码:
await Promise.map(
entry.tags,
async (tag) => {
await factory(Tag)().create(tag);
},
{ concurrency: 1000 },
).catch(() => {
/** @todo find a better way */
process.exit(1);
});
目前,如您所见,我正在使用process.exit(1),但我不会在那里处理退出代码。相反,Promise 链应该立即停止并且应该抛出错误以便从父函数中捕获。
p-map 库中的参数“stopOnError”完全符合我的预期,我在 Bluebird 上找不到类似的东西。
我也尝试在.catch() 中使用.cancel() 方法,但显然它不起作用。
【问题讨论】: