Описание

Реализуйте Promise.all

СредняяАсинхронностьjs
Встречается вЯндексТ-БанкVK

Реализуйте функцию promiseAll(promises), которая ведёт себя как Promise.all:

  • принимает итерируемый объект из промисов и обычных значений;
  • возвращает промис, который резолвится массивом результатов в исходном порядке — независимо от того, какой промис завершился первым;
  • если хотя бы один промис отклонён — итоговый промис отклоняется с этой же ошибкой;
  • для пустого входа сразу резолвится пустым массивом.

Использовать Promise.all, Promise.allSettled и Promise.any нельзя.

Пример

const sleep = (ms, value) => new Promise((r) => setTimeout(() => r(value), ms));

promiseAll([sleep(30, 'a'), 'b', Promise.resolve('c')])
  .then(console.log); // ['a', 'b', 'c']

promiseAll([sleep(10, 1), Promise.reject(new Error('boom'))])
  .catch((e) => console.log(e.message)); // 'boom'

Как проверяется

Тесты вызывают вашу функцию и печатают результат через console.log. Сравнивается весь вывод в консоль, поэтому уберите отладочные console.log перед отправкой.