Async/await作为generator+自动执行器+promise的语法糖,他能够用同步写法写异步代码,同时他捕获错误的方式也十分简单:promise.catch和try-catch。
promise.catch
async function foo() {
let res = await 1;
throw new Error('my error');
}
foo().catch(e => {
console.log('catch捕获', e);
});
由于async会返回一个promise,那么对于该promise我们可以链式调用catch,用于捕获抛出的错误。
try-catch
async function foo() {
try {
let res = await 1;
throw new Error('my error');
} catch (e) {
console.log('catch捕获', e);
}
}
foo();
async函数是同步写法,因此我们也可以用同步代码的错误捕获方式去捕获异步错误:在async中直接用try-catch包裹代码。
需要注意的是,await后面即便是一个promise,并且promise里抛出错误,也是能够用try-catch捕获的。之间我们分析过,promise内的错误是内部处理了,不会抛到外面,但是加了await后却在外面捕获,具体原因没有找到,猜测是await关键字做了一些内部处理。