Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Войти

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

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

© 2026 YeaHub

Документы

Медиа

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

На смену чего пришли промисы и какие у них основные состояния?

Этот вопрос исследует эволюцию асинхронного программирования в JavaScript и жизненный цикл Promise.

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

Промисы пришли на смену callback hell и предоставили более чистый способ работы с асинхронными операциями. Промис имеет три состояния: pending (ожидание), fulfilled (выполнено успешно) и rejected (выполнено с ошибкой). После перехода в fulfilled или rejected состояние промиса больше не меняется.

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

Промисы решают проблемы асинхронного кода, которые были характерны для callback-based подхода.

Эволюция асинхронности:

Callback Hell:

// Проблема вложенных callback'ов
getData(function(data1) {
  processData(data1, function(data2) {
    saveData(data2, function(data3) {
      displayData(data3, function() {
        // И так далее...
      });
    });
  });
});

Promise решение:

getData()
  .then(processData)
  .then(saveData)
  .then(displayData)
  .catch(handleError);

Состояния Promise:

1. Pending (Ожидание):

const promise = new Promise((resolve, reject) => {
  // Асинхронная операция еще не завершена
});
// promise.state = 'pending'

2. Fulfilled (Выполнено):

const promise = Promise.resolve('success');
// или
const promise = new Promise((resolve) => {
  resolve('success');
});
// promise.state = 'fulfilled'

3. Rejected (Отклонено):

const promise = Promise.reject(new Error('failure'));
// или
const promise = new Promise((resolve, reject) => {
  reject(new Error('failure'));
});
// promise.state = 'rejected'

Схема переходов:

Pending
   ↓
Fulfilled (с значением)
   или  
Rejected (с причиной ошибки)

Определение состояния:

const promise = someAsyncOperation();

promise.then(
  value => {
    console.log('Fulfilled:', value);
  },
  error => {
    console.log('Rejected:', error);
  }
);

Особенности:

  • Состояние изменяется только один раз

  • Нельзя отменить выполнение Promise

  • Цепочка then/catch создает новые Promise

Преимущества над callback'ами:

  • Читаемый последовательный код

  • Централизованная обработка ошибок

  • Возможность комбинирования через Promise.all/race

Уровень

  • Рейтинг:

    3

  • Сложность:

    6

Навыки

  • JavaScript

    JavaScript

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

#promise

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