anync函数是在ES2017标准中引入的,使用async关键字声明的函数,是AsyncFunction构造函数的实例。在async函数内部可以使用await关键字,表示紧跟在后面的表达式需要等待结果。async和await关键字可以更简洁的写出基于Promise的异步行为。
- 基本用法
async函数会返回一个Promise对象,如果一个async函数的返回值不是Promise,那么会被隐式地包装到一个Promise中。如:
asnyc function asyncFunc() {
return 'hello'
}
// 等价于
function asyncFunc() {
return Promise.resolve('hello')
}
console.log(asyncFunc()) // Promise{'hello'}
asyncFunc().then(res => {
console.log(res) // hello
})
async函数内部return语句返回的值,会成为then()方法回调函数的参数
async函数中可以有await表达式,async函数执行时,如果遇到await,会先暂停执行,等到触发的异步操作完成后,再恢复async函数的执行并返回解析值。如:
function asyncFunc() {
return new Promise(resolve => {
console.log('延时任务')
resolve()
}, 1000)
}
async function helloAsync() {
await asyncFunc()
console.log('hello')
}
helloAsync()
// 延时任务
// hello
- 错误处理
如果async函数内部抛出错误,会导致返回的Promise对象变为reject状态,抛出的错误对象会被catch()方法回调函数接收到。如:
async function asyncFunc() {
await new Promise((resolve, reject) => {
throw new Error('抛出错误')
})
asyncFunc().then(res => {
console.log(res)
}).catch( err => {
console.log(err) // 抛出错误
})
}
网友评论