我正在使用 babeljs 和 es7 风格的 async/await 方法。我有一个主脚本,它将在所有返回承诺的对象数组上调用异步方法。我使用 Promise.all() 等待所有这些任务返回,但是,这些任务可能需要很长时间,如果它们超过阈值,我想中止所有这些任务,并且任务以适当的方式处理。
有没有办法完成这样的事情?目前我能想到的唯一方法是生成一个进程来完成调用这些方法的工作并等待它们全部解决,如果达到时间限制,它可以终止进程并执行它需要的任何处理。
更新:关于主脚本正在等待的这些方法的一些说明......他们可能正在执行一系列操作(调用外部系统,在某处流式传输文件等)并且没有执行可以独立取消的单个操作。
更新#2:一些未经测试的半伪代码
class Foo1 {
async doSomething() {
// call some external system
// copy some files
// put those files somewhere else (s3)
}
}
class Foo2 {
async doSomething() {
// Do some long computations
// Update some systems
}
}
class FooHandler {
constructor() {
this.fooList = [];
}
async start() {
await Promise.all(this.fooList.map(async (foo) => {
return await foo.doSomething();
}));
}
}
let handler = new FooHandler();
handler.fooList.push(new Foo1());
handler.fooList.push(new Foo2());
// if this call takes too long because of slow connections, errors, whatever,
// abort start(), handle it in whatever meaningful way, and continue on.
await handler.start();