Ожидание нескольких обещаний

У конструктора Promise есть метод all, который, получая массив обещаний, возвращает обещание, которое ждёт завершения всех указанных в массиве обещаний. Затем он выдаёт успешный результат и возвращает массив с результатами. Если какие-то из обещаний в массиве завершились неудачно, общее обещание также возвращает неудачу (со значением неудавшегося обещания из массива).

Попробуйте сделать что-либо подобное, написав функцию all.

Заметьте, что после завершения обещания (когда оно либо завершилось успешно, либо с ошибкой), оно не может заново выдать ошибку или успех, и дальнейшие вызовы функции игнорируются. Это может упростить обработку ошибок в вашем обещании.

function all(promises) {

  return new Promise(function(success, fail) {

    // Ваш код.

  });

}

// Проверочный код.

all([]).then(function(array) {

  console.log("Это должен быть []:", array);

});

function soon(val) {

  return new Promise(function(success) {

    setTimeout(function() { success(val); },

               Math.random() * 500);

  });

}

all([soon(1), soon(2), soon(3)]).then(function(array) {

  console.log("Это должен быть [1, 2, 3]:", array);

});

function fail() {

  return new Promise(function(success, fail) {

    fail(new Error("бабах"));

  });

}

all([soon(1), fail(), soon(3)]).then(function(array) {

  console.log("Сюда мы попасть не должны ");

}, function(error) {

  if (error.message != "бабах")

    console.log("Неожиданный облом:", error);

});

Более 800 000 книг и аудиокниг! 📚

Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением

ПОЛУЧИТЬ ПОДАРОК