Я использую babeljs с методами async/wait es7. У меня есть главный script, который вызовет метод async для массива объектов, которые возвращают promises. Я использую Promise.all(), чтобы дождаться, пока все возвратятся, однако эти задачи могут занять много времени, и если они превысят порог, я бы хотел отменить все из них и обработать задачу соответствующим образом.
Есть ли способ выполнить такую вещь? В настоящее время единственный способ, о котором я могу думать, - это создать процесс, который выполняет работу по вызову этих методов и дожидаясь их решения, и если срок достигнет, он может убить процесс и выполнить любую необходимую обработку.
Обновление: некоторые пояснения к этим методам, которые ждут главный script... Они могут выполнять длинную серию операций (вызывать внешние системы, потоковые файлы где-то и т.д.) и не выполнять одно действие, которое могло бы отменяется независимо.
Обновление # 2: некоторый непроверенный код полу-psuedo
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();