Базовые правила (Promises/A+)
- Promise может быть в состоянии pending / fulfilled / rejected.
- Переход в fulfilled/rejected окончателен (нельзя изменить value/reason).
.then всегда возвращает новый Promise — можно строить цепочки.
- Обработчики
then вызываются асинхронно (microtask), даже если Promise уже settled.
- Если
onFulfilled бросает / возвращает rejected — следующий Promise rejected.
- Возврат значения из
then → следующий Promise fulfilled с этим value.
- Возврат Promise из
then — «разворачивание» (adoption) его состояния.
- Несколько
then на одном Promise — все получат тот же результат (fan-out).
Promise.resolve(1)
.then((x) => x + 1)
.then((x) => {
throw new Error("boom");
})
.catch((e) => "recovered")
.then((x) => console.log(x));
На собеседовании часто проверяют понимание цепочек и однократного settle.