最近看一些文章,居然还有人不知道如何捕获async/await的错误,所以发一篇文章,顺便推荐一个很棒的npm包。
什么是async await
我就不复制粘贴了,直接大白话说吧,如果说的不对,欢迎指导。async 是迭代器的语法糖,这是一个标准的迭代器。
function* generator(){
yield 1;
yield 2;
yield 3;
}
const g = generator()
g.next() //1
g.next() //2
g.next() //3
那么如果用async是怎么样的,此时程序会等待doSth执行完,就是类似于yield,然后return出去。
async function a(){
await doSth()
return 1
}
async 标准返回的是一个Promise对象,也就是说如果你不return,你也可以这样写
async function a(){
await doSth1()
}
a.then(()=>{
doSth2()
})
好了,基础知识到此完毕。
如何捕获错误
方法一:try catch大法。
try catch其实可以捕获同步语句中的错误,因此我们可以在async function中使用try catch,并将错误抛出
async function a(){
try{
await doSth1()
}catch(e){
throw e
}
}
方法2:Promise的catch方法
由于async 返回的是一个Promise,因此我们可以直接使用catch方法。
async function a(){
await doSth1()
}
a().then().catch()
//或者
a().then(()=>{//成功},()=>{//失败})
方法三 await-to-js
这个npm库我已经使用在了大多数生成环境中,有着不错的兼容性,体积也很小,不影响体验。 同时也支持在node环境中使用
import to from 'await-to-js'
//or
const to = require('await-to-js').default
const [err,res] = to(Promise)
遵循了error first的理念,因此数组第一个值是错误,如果没有错误返回null