Я использую babeljs с методами async/wait es7. У меня есть главный скрипт, который вызовет метод async в массиве объектов, которые возвращают обещания. Я использую Promise.all(), чтобы дождаться, пока все возвратятся, однако эти задачи могут занять много времени, и если они превысят порог, я бы хотел отменить все из них и обработать задачу соответствующим образом.Возможность прерывания асинхронного вызова
Есть ли способ для достижения такой цели? В настоящее время единственный способ, о котором я могу думать, - это создать процесс, который выполняет работу по вызову этих методов и дожидаясь их решения, и если срок достигнет, он может убить процесс и выполнить любую необходимую обработку.
Обновление: некоторые разъяснения об этих методах, которые ждут главный сценарий ... Они могут выполнять длинную серию операций (вызывая внешние системы, потоковые файлы где-то и т. Д.) И не выполняют одно действие, которое может быть выполнено отменяется независимо.
Update # 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();
Не могли бы вы высказать свой код? –
Это отличный вопрос о реальной проблеме, почему она занижена? –
related: [Как отменить цепочку обещаний EMCAScript6 (ванильный JavaScript)] (http://stackoverflow.com/q/29478751/1048572) – Bergi