Да, внутри then можно выбросить ошибку с помощью throw. Такая ошибка автоматически превращает Promise в rejected. Она будет поймана ближайшим catch ниже по цепочке. По сути, throw внутри then эквивалентен return Promise.reject(error).
Да, внутри then можно выбросить ошибку с помощью throw. Такая ошибка автоматически превращает Promise в rejected. Она будет поймана ближайшим catch ниже по цепочке. По сути, throw внутри then эквивалентен return Promise.reject(error).
thenЕсли внутри then:
выбрасывается ошибка (throw)
возвращается Promise.reject(...)
то цепочка переключается в режим ошибки.
throwPromise.resolve(1)
.then(v => {
throw new Error('boom');
})
.catch(e => {
console.log(e.message);
});
Результат:
catch поймает ошибку "boom"
rejectPromise.resolve(1)
.then(() => {
return Promise.reject('fail');
})
.catch(e => console.log(e));
catch нетОшибка “провалится” дальше по цепочке
Если не будет ни одного catch, появится UnhandledPromiseRejection
finallyfinally выполнится до следующего catch
Но ошибку он не поглотит, если сам не обработает ее
Ошибки внутри then — нормальная и ожидаемая практика. Они автоматически превращаются в rejected Promise и обрабатываются ближайшим catch, что делает цепочки Promise предсказуемыми и удобными.