* Функция принимает массив промисов (считаем, что непустой) и возвращает промис.

javascript function any(promises) { return new Promise((resolve, reject) => { const errors = []; let rejectedCount = 0; let resolved = false;

Короткий ответ

Что ответить на собеседовании

javascript function any(promises) { return new Promise((resolve, reject) => { const errors = []; let rejectedCount = 0; let resolved = false;

Подробный разбор

Ответ с пояснениями

Условие

  • Функция принимает массив промисов (считаем, что непустой) и возвращает промис.

  • Если какой-то из переданных промисов резолвится (успешно выполняется), то возвращаемый промис резолвится с этим значением.

  • Если несколько промисов успешно выполняются, то возвращаемый промис резолвится

  • с первым успешным значением, вне зависимости от порядка промисов в массиве.

  • Если все переданные промисы реджектятся, то возвращаемый промис реджектится с ошибкой AggregateError, в которой сгруппированы все ошибки, с учетом порядка промисов.

  • AggregateError можно создавать таким образом: new AggregateError(errors, 'No Promise in any was resolved')

function any(promises) { // your code here }

Ответ

javascript function any(promises) { return new Promise((resolve, reject) => { const errors = []; let rejectedCount = 0; let resolved = false;

promises.forEach((p, index) => {
  Promise.resolve(p)
    .then(value => {
      if (!resolved) {
        resolved = true;
        resolve(value);
      }
    })
    .catch(error => {
      errors[index] = error;
      rejectedCount++;
      if (rejectedCount === promises.length) {
        reject(new AggregateError(errors, 'No Promise in any was resolved'));
      }
    });
});

}); }


Эта реализация создаёт новый промис, который резолвится при первом успешном выполнении любого из переданных промисов. Если все промисы отклоняются, возвращается AggregateError с массивом ошибок в порядке исходного массива.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее