使用try...catch捕获await的错误后async仍然返回状态为fulfilled的promise

这里为什么会执行后续的console.log('success');
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
</style>
</head>
<body>
<script>
const wait = (ms, error) => {
return new Promise ((resolve, reject) => {
setTimeout (() => {
if (!error){
resolve();
}else{
reject(error);
};
}, ms);
});
};
const cc = async () => {
try {
await wait(1000, '等待1s后出错了')
await wait(2000, '等待2s后出错了');
} catch (error) {
console.log(error, 'try...catch');
}
};
cc().then (() => {
console.log('success');
}, (err) => {
console.log(err);
});
</script>
</body>
</html>21
收起
正在回答
1回答
同学你好,解答如下:
1、try catch处理的是wait函数,与async的自身的情况没有关系。
2、async自身是一个异步函数,当它内部没写return时,相当于return undefined:

如果async的返回值不是Promise对象,则返回值会被包裹一层Promise.resolve():

即会返回一个成功状态的Promise,返回值是undefined,所以控制台打印结果如下:

如下课程中讲过:
https://class.imooc.com/lesson/2387#mid=58206(4分钟左右)
先回顾一下。
3、从第2点可知,函数cc本身是异步的,它可以被then接收,并且它默认返回了成功状态的Promise,所以success可以被打印。
祝学习愉快!

恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星