<分区>
我有并行线程,并且想在其中一个线程抛出错误时中断所有未完成的线程。 但似乎所有其他线程都在继续执行。
async test() {
let threads = [];
console.log('Starting threads');
try {
for (let i = 0; i < 10; i++) {
threads.push(this.worker(i));
}
console.log(`Waiting for threads`);
await Promise.all(threads);
}
catch (err) {
console.log(err);
throw err;
}
}
async worker(i) {
// Sleep for 2 seconds to emulate API request
let p = new Promise((resolve, reject) => {
return setTimeout(
() => resolve(true),
2000
);
}
);
await p;
console.log(i);
throw 'Error';
}
我得到日志
0
Error
1
2
3
4
5
6
7
8
9
因此,当第一次调用“worker”函数(i=0)时抛出错误时,它会被函数“test”中的“catch” block 捕获。然后错误被抛给上层函数,但其他 9 个 worker 仍然继续工作。 有什么办法可以打破它们?我只看到一种方法 - 在函数“测试”的捕获“ block ”中调用 process.exit,但它会中断所有程序而不是当前函数。