使用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 星