Реализуйте Promise.all
СредняяАсинхронностьjs
Реализуйте функцию 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 перед отправкой.