Представьте, что цепочки обещаний имеют две цепочки - выполненные и отклоненные
Кроме того, вы знаете, что .then принимает два аргумента .then(onFulfilled, onRejected)
- если один из onFulfilled
или onRejected
не является функцией, он игнорируется
.catch(fn)
просто .then(null, fn)
В каждой из функций, выполняемых .then
(либо onFulfilled или onRejected), если выдается ошибка, то следующая.then
'onRejected
будет вызван следующим - в противном случае onFulfilled
будет вызван следующим
Если какой-либо из аргументов .then
не является функцией, .then игнорирует их - в случаеесли onFulfilled не является функцией, .then будет возвращать разрешенное обещание, которое принимает выполненное (разрешенное) значение, а в случае, когда onRejected не является функцией, .then будет возвращать отклоненное обещание, которое принимает отклоненное значение * 1019.*
Ваш код буквально (просто показывает возвращаемые значения, игнорируя console.logs)
addTwo(5, 6)
.then(res => addTwo(res, 100), err => undefined)
.then(res => undefined, err => undefined);
, так как первая функция onRejected
возвращает undefined
, вторая .then(res=>
будет вызываться
AsВ другом ответе предлагается один .catch в этом случае
, поэтому
addTwo(5, 6)
.then((res) => {
console.log("Answer of addition: " + res)
return addTwo(res, 100)
})
.then((res) => {
console.log("Answer of second addition: " + res)
})
.catch((err) => {
console.log("We have an error boss: " + err)
});
То есть - без console.logs
addTwo(5, 6)
.then(res => addTwo(res, 100), null)
.then(res => undefined, null)
.then(null, err => undefined);
с момента первогои во-вторых, затем имеют значение NULL для onRejected
, то есть не является функцией, «ошибка» стекает по отклоненной цепочке, пока функция не «найдена»