Возможность прервать асинхронный вызов

Я использую 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();

Ответы на вопрос(3)

Ваш ответ на вопрос