04.i Promise.then()

Promise.then(onFulfilled, onRejected) позволяет установить обработчики реакций Promise и всегда возвращает новый Promise, находящийся в состоянии pending до тех пор, пока его обработчики не отработают.

  • Вызов обработчиков происходит асинхронно.

  • Вызов произойдет когда стек вызовов JS опустеет.

  • Если ни один из аргументов не был передан, то будет Promise без обработчиков, но ошибки не будет.

Resolve with Value

Если обработчик возвращает значение, то Promise переходит в состояние fulfilled с этим же значением:

const promise = Promise.resolve("Success.");
const pending = promise.then(value => "magic");
pending.then(
  value => console.log("success:", value),
  () => console.log("error")
);
// success: magic

Resolve with Error

Если обработчик выбросил исключение, то Promise переходит в состояние rejected с этим же исключением:

const promise = Promise.resolve("Success.");
const pending = promise.then(value => {
  throw new Error("error");
});
pending.then(
  () => console.log("success"),
  () => console.log("error")
);
// error

Resolve with Promise

Если обработчик возвращает Promise установленный в состояние fulfilled, то Promise перешел в состояние fulfilled со значением равным значению установленного Promise:

const promise = Promise.resolve("Success.");
const pending = promise.then(value => Promise.resolve("Magic"));
pending.then(
  value => console.log("success:", value),
  () => console.log("error")
);
// success: Magic

Если обработчик возвращает ожидающий Promise, то текущий Promise так же будет находится в состоянии ожидания до тех пор, пока нижележащий Promise не будет установлен.

Если обработчик возвращает Promise установленный в состояние rejected, то Promise переходит в состояние rejected с той же ошибкой, что и возвращенный Promise:

const promise = Promise.resolve("Success.");
const pending = promise.then(value => Promise.reject("Magic"));
pending.then(
  value => console.log("success:", value),
  value => console.log("error", value)
);
// error Magic

Last updated