Возможность прервать асинхронный вызов
Я использую babeljs с асинхронными / ожидающими методами в стиле es7. У меня есть основной скрипт, который будет вызывать асинхронный метод для массива объектов, которые все возвращают обещания. Я использую 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();