Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Войти

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

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

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про JavaScript: promise, all

Как реализовать аналог Promise.all вручную?

Вопрос проверяет понимание работы Promise, асинхронности и агрегации результатов.

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

Аналог Promise.all можно реализовать, создав новый Promise и вручную отслеживая выполнение всех переданных Promise. Нужно сохранить результаты в массив в правильном порядке и считать количество завершённых операций. Если хотя бы один Promise отклоняется, итоговый Promise должен сразу перейти в состояние rejected. Это демонстрирует понимание базовой модели Promise.

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

Определение

Promise.all — это метод, который возвращает Promise, резолвящийся массивом результатов, когда все входные Promise успешно завершились.

Основные требования к реализации

Перед кодом важно понимать условия.

  1. Сохранять порядок результатов

  2. Резолвиться только после выполнения всех Promise

  3. Реджектиться при первой ошибке

  4. Поддерживать не-Promise значения

Упрощённая реализация

function promiseAll(promises) {
  return new Promise((resolve, reject) => {
    const results = [];
    let completed = 0;

    promises.forEach((p, index) => {
      Promise.resolve(p)
        .then(value => {
          results[index] = value;
          completed += 1;

          if (completed === promises.length) {
            resolve(results);
          }
        })
        .catch(reject);
    });

    if (promises.length === 0) {
      resolve([]);
    }
  });
}

Почему важен Promise.resolve

  1. Позволяет обрабатывать обычные значения

  2. Делает поведение совместимым с Promise.all

  3. Упрощает логику

Где это полезно

  1. Понимание внутреннего устройства Promise

  2. Собеседования уровня Middle+

  3. Отладка сложных асинхронных сценариев

Вывод

Ручная реализация Promise.all показывает глубокое понимание асинхронности: очередей задач, обработки ошибок и синхронизации нескольких Promise.

Уровень

  • Рейтинг:

    4

  • Сложность:

    8

Навыки

  • JavaScript

    JavaScript

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

#promise

#all

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