Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про JavaScript: Promise.all, custom implementation, non-promise values, Promise.resolve

Как корректно обернуть не-промисные значения в кастомной реализации Promise.all?

Вопрос проверяет понимание работы Promise.all и умение обрабатывать не-промисные значения в кастомной реализации.

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

Для корректной обработки не-промисных значений в кастомной реализации Promise.all необходимо обернуть каждое значение в Promise.resolve(). Это гарантирует, что все элементы массива будут промисами, даже если изначально они являются обычными значениями. Затем можно использовать Promise.all или реализовать собственную логику ожидания всех промисов.

Длинный ответ

Понимание задачи

При реализации кастомной версии Promise.all важно корректно обрабатывать элементы массива, которые не являются промисами. Стандартный Promise.all автоматически оборачивает не-промисные значения с помощью Promise.resolve(), что позволяет единообразно работать со всеми элементами.

Практический пример реализации

function customPromiseAll(promises) {
  return new Promise((resolve, reject) => {
    const results = [];
    let completed = 0;
    promises.forEach((item, index) => {
      // Оборачиваем каждое значение в Promise.resolve()
      Promise.resolve(item)
        .then(value => {
          results[index] = value;
          completed++;
          if (completed === promises.length) {
            resolve(results);
          }
        })
        .catch(reject);
    });
  });
}

Ключевые моменты

  • Использование Promise.resolve() гарантирует, что даже обычные числа, строки или объекты будут обработаны как промисы.
  • Это позволяет избежать ошибок при попытке вызвать .then() на не-промисном значении.
  • Результаты сохраняются в правильном порядке благодаря индексации.

Вывод

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

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию

Уровень

  • Рейтинг:

    4

  • Сложность:

    5

Навыки

  • JavaScript

    JavaScript

Ключевые слова

#Promise.all

#custom implementation

#non-promise values

#Promise.resolve

Подпишись на React Developer в телеграм

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию