今天写了一段类似这样的代码
function Sleep(){
return new Promise((resolve, reject)=>{
setTimeout(() => {
reject("failed")
}, 1000);
})
}
async function Test1(){
let ret = await Sleep().catch(err=>{
console.log("err="+err)
});
console.log("ret="+ret)
}
Test1();
Test1()
方法中调用了await来处理Sleep()
返回的Promise
,
我期望的输出是
err=failed
但是实际上输出:
err=failed
ret=undefined
经过一番折腾后,可达预期的代码可以这样写:
async function Test2(){
try{
let ret = await Sleep();
console.log("ret="+ret)
}catch(err){
console.log("err="+err)
}
}
Test2();
事后仔细想想问题出在let ret = await Sleep().catch()
这句代码,由于这是一个链式调用,所以当触发了catch调用后,就可以理解为await了catch()返回的这个Promise,即整个表达式的返回值是catch(()=>{})
中匿名函数的返回值
async function Test1(){
let ret = await Sleep().catch(err=>{
console.log("err="+err)
return 0; // 增加此句,此处返回0
});
console.log("ret="+ret)
}
Test1();
得到输出:
err=failed
ret=0