**问题:**最后2个.then
被调用,即使我返回Promise.reject()
。第一个.then()
打印undefined,第二个.then()
也打印输出。
有人能解释一下为什么吗?
let p4 = new Promise((resolve,reject)=>{
resolve("p4 Resolved");
});
p4.then((val)=>{
console.log(val);
return Promise.reject("20 Rejected")
}).catch((error)=>{console.log(error)})
.then((val)=>{console.log(val);return 290})
.then((val)=>{console.log("Last then : "+val);});
3条答案
按热度按时间kmbjn2e31#
catch
也返回一个promise,因为你没有返回任何东西,它将是一个满足undefined
的promise,因此第一个then
打印undefined
。最后,最后一个then
从第一个then
返回的promise中获取值290并打印它。mum43rcc2#
.catch()
返回一个新的挂起的Promise
:返回一个新的Promise。这个新的Promise在返回时总是挂起的,不管当前Promise的状态如何。如果onRejected抛出错误或返回一个本身被拒绝的Promise,它最终会被拒绝;-
Promise#catch()
,* 返回值 *|MDN第一个
.then()
返回一个rejected promise,正如您所期望的,它调用.catch()
。然而,由于作为参数(error => { console.log(error) }
)传递给它的回调不会抛出任何错误,因此新的promise将被实现,因此它将调用所有后续的.then()
。2guxujil3#
当你在一个Promise链中嵌套多个.then()函数时,每个.then()函数将按照它们被链接的顺序依次执行。
每个.then()函数的结果作为参数传递给链中的下一个.then()函数。这允许您执行一系列异步操作并逐步处理结果。
链接参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Using_promises#chaining