← Назад к вопросам

Как выглядит в браузере объект написанный через Promise?

2.0 Middle🔥 241 комментариев
#JavaScript Core

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI2 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Как выглядит в браузере объект, написанный через Promise

Промисе (Promise) — это объект в JavaScript, который представляет результат асинхронной операции. Давайте разберём его структуру в браузере.

Что такое Promise

Promise — это объект, который может находиться в трёх состояниях:

// Создание Promise
const promise = new Promise((resolve, reject) => {
  setTimeout(() => resolve('Success!'), 1000);
});

console.log(promise);
// Promise { <pending> }  — состояние pending (ожидание)

Состояния Promise в браузере

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

const promise = new Promise((resolve, reject) => {
  // Код выполняется, но результат ещё не готов
});

console.log(promise);
// Вывод в Chrome DevTools:
// Promise { <pending> }

Внутренняя структура (видна в DevTools):

Promise
├── [[PromiseState]]: "pending"
├── [[PromiseResult]]: undefined
└── [[PromiseFulfillmentHandler]]: [ ... ]

2. Fulfilled (Выполнено успешно)

const promise = Promise.resolve('Success!');

console.log(promise);
// Вывод в Chrome DevTools:
// Promise { 'Success!' }

Внутренняя структура:

Promise
├── [[PromiseState]]: "fulfilled"
├── [[PromiseResult]]: "Success!"
└── [[PromiseFulfillmentHandler]]: []

3. Rejected (Ошибка)

const promise = Promise.reject(new Error('Failed!'));

console.log(promise);
// Вывод в Chrome DevTools:
// Promise { <rejected> Error: Failed! }

Внутренняя структура:

Promise
├── [[PromiseState]]: "rejected"
├── [[PromiseResult]]: Error: Failed!
└── [[PromiseRejectionHandler]]: []

Полный пример с жизненным циклом

// 1. Promise создан (pending)
const promise = new Promise((resolve, reject) => {
  console.log(promise);  // Promise { <pending> }
  
  setTimeout(() => {
    resolve('Data loaded!');  // Меняет состояние на fulfilled
  }, 1000);
});

// 2. Привязываем обработчики
promise
  .then(result => {
    console.log(result);  // 'Data loaded!' — выполнится через 1 сек
  })
  .catch(error => {
    console.error(error);
  });

// 3. После выполнения
// Promise { 'Data loaded!' }

Как Promise выглядит в DevTools

Chrome DevTools (Console Tab):

> const p = new Promise(r => setTimeout(() => r('hello'), 1000))
← Promise {<pending>}

// Спустя секунду
> p
← Promise {"hello"}
  [[Prototype]]: Promise
  [[PromiseState]]: "fulfilled"
  [[PromiseResult]]: "hello"

Firefox DevTools:

> const p = Promise.resolve(42)
← Promise { <state>: "fulfilled", <value>: 42 }

Методы Promise и их возвращаемые значения

// Promise.resolve() возвращает fulfilled Promise
const p1 = Promise.resolve(42);
console.log(p1);
// Promise { 42 }

// Promise.reject() возвращает rejected Promise
const p2 = Promise.reject('Error');
console.log(p2);
// Promise { <rejected> "Error" }

// .then() возвращает новый Promise
const p3 = p1.then(value => value * 2);
console.log(p3);
// Promise { <pending> }  — затем Promise { 84 }

// .catch() возвращает новый Promise
const p4 = p2.catch(error => 'Handled');
console.log(p4);
// Promise { <pending> }  — затем Promise { "Handled" }

Promise.all() и Promise.race()

// Promise.all() возвращает Promise с массивом результатов
const p1 = Promise.resolve(1);
const p2 = Promise.resolve(2);
const p3 = Promise.resolve(3);

const all = Promise.all([p1, p2, p3]);
console.log(all);
// Promise { <pending> }  — затем Promise { [ 1, 2, 3 ] }

// Если один Promise rejected, весь all rejected
const mixed = Promise.all([p1, Promise.reject('Error'), p3]);
console.log(mixed);
// Promise { <pending> }  — затем Promise { <rejected> "Error" }

// Promise.race() возвращает первый результат
const race = Promise.race([p1, p2, p3]);
console.log(race);
// Promise { <pending> }  — затем Promise { 1 }  (самый быстрый)

Практический пример: Fetch API

// fetch() возвращает Promise
const promise = fetch('https://api.example.com/users');
console.log(promise);
// Promise { <pending> }

// После загрузки
promise.then(response => {
  console.log(promise);
  // Promise { Response }
  // [[PromiseResult]]: Response
  //   ├── status: 200
  //   ├── statusText: "OK"
  //   ├── body: ReadableStream
  //   └── ...
  
  return response.json();  // Возвращает новый Promise
})
.then(data => {
  console.log(data);
  // [{id: 1, name: "John"}, ...]
});

Async/Await (синтаксический сахар для Promise)

// async функция возвращает Promise
async function fetchUsers() {
  const response = await fetch('https://api.example.com/users');
  return response.json();
}

const promise = fetchUsers();
console.log(promise);
// Promise { <pending> }

// После выполнения
// Promise { [ {id: 1, name: "John"}, ... ] }

Визуализация в DevTools

Раскрытый Promise:

Promise
▶ <state>: "fulfilled"
▶ <value>: Object
  ├── id: 1
  ├── name: "John"
  └── email: "john@example.com"

Rejected Promise:

Promise
▶ <state>: "rejected"
▶ <reason>: Error: Network request failed
  ├── message: "Network request failed"
  ├── stack: "Error: Network request failed\n  at ..."
  └── ...

Чеклист при работе с Promise

  • Promise может быть в трёх состояниях: pending, fulfilled, rejected
  • Состояние меняется только один раз
  • .then() и .catch() возвращают новый Promise
  • Promise.all() ждёт всех, или rejected если хоть один rejected
  • Promise.race() возвращает первый результат
  • async/await — это синтаксис для Promise
  • Всегда обрабатывай ошибки (.catch или try/catch)

Вывод

Promise в браузере — это объект с внутренним состоянием, который представляет асинхронный результат. На собеседовании это показывает, что вы:

  • Понимаете асинхронность в JavaScript
  • Знаете внутреннее устройство Promise
  • Можете отлаживать асинхронный код
  • Используете Promise эффективно