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
Was this helpful?