@vasyok228

Как прервать Promise.all?

Здравствуйте. Подскажите как можно прервать promise.all, приведу пример ниже

let promisess = this.distribution.files.map(async(res) => {

// код......

})
Promise.all(promisess).then(() => {
    // все отлично, без ошибок

}).catch(err => {
// Есть ошибка, останавливаем обработку promisess
})


С 10 утра гуглю и гуглю, ничего доступного и рабочего не нашел. Буду очень благодарен кто сможет подсказать
  • Вопрос задан
  • 642 просмотра
Решения вопроса 1
Aetae
@Aetae
Тлен
Как-то так:
function makeRejectable(...promisess) {
  let reject;
  const rejector = new Promise((_, r) => reject = r);
  
  const promise = Promise.race([
    Promise.all(promisess),
    rejector
  ]);
  
  return [promise, reject]
}

const [promise, reject] = makeRejectable(...promisess);
  
promise.then(console.log, console.error);
  
reject('reject');
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@KingstonKMS
Вот же

let promisess = this.distribution.files.map(async(res) => {
    return new Promise((resolve, reject) => {
    // код
    // если код выполнился с ошибкой - reject(), без ошибок - resolve()
    });
});

Promise.all(promisess).then(() => {
    // все отлично, без ошибок

}).catch(err => {
// Есть ошибка, останавливаем обработку promisess
})
Ответ написан
profesor08
@profesor08
Как прервать Promise.all?

Никак, так как все промисы, которые передаются в этот метод, выполняются. И независимо от результата, код всех промисов будет выполнен. Так как сначала вычисляются значение переданных в метод all аргументов, а потом вызывается сам метод, а это значит, что код всех передаваемых промисов будет выполнен.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы