let condition=false;
let p1=new Promise((resolve,reject)=>{
console.log("p1 is pending");
setTimeout(()=>{
if(condition){
console.log("p1 resolved");
resolve("i resolved");
}
else{
console.log("p2 rejected");
reject("i rejected");
}
},3000);
});
p1.then((returned_val)=>{
console.log(".then-> p1 returned :",returned_val);
})
p1.catch((returned_val)=>{
console.log(".catch-> p1 returned :",returned_val);
});
我希望控制台不会出现错误,因为有.catch函数来处理它。但是这种情况只发生在单独使用。catch函数而不是同时使用。then和。catch函数
时(在控制台中没有错误)。这里有两个承诺链:p1.then()
和p1.catch()
拒绝通过两个链传播,但在第一个链中没有捕获。
如果你在那里添加一个.catch
,这个问题就会消失。
let condition=false;
let p1=new Promise((resolve,reject)=>{
console.log("p1 is pending");
setTimeout(()=>{
if(condition){
console.log("p1 resolved");
resolve("i resolved");
}
else{
console.log("p2 rejected");
reject("i rejected");
}
},3000);
});
const errorHandler = (returned_val)=>{
console.log(".catch-> p1 returned :",returned_val);
}
p1.then((returned_val)=>{
console.log(".then-> p1 returned :",returned_val);
}).catch(errorHandler)
p1.catch(errorHandler);
和预期的一样记录了两次。