文章目录
- async函数的语法
- async函数是什么
- 异步函数声明式
- 返回Promise对象
- await表达式
- 错误处理
- async函数执行Promise
- 注意事项
- 使用try…catch语句
- 多个await同时触发
- await表达式的限制
async函数的语法
async函数是什么
该函数的主要目的就是简化使用Promises,异步调用的操作,并对一组Promises 执行某些操作。正如 Promises类似于结构化回调,
async/await类似于组合生成器和Pramises
function resloveAfter2Seconds() {
return new Promise(resolve => {
setTimeout(() => {
resolve('resolved')
}, 3000)
})
}
async function asyncCall() {
console.log('calling');
var result = await resloveAfter2Seconds()
console.log(result);
}
asyncCall() //calling
异步函数声明式
异步函数声明式用于定义一个返回Promise对象的异步函数。异步函数是指通过事件循环异步执行的函数,它会通过一个隐式的Promise返回其结构。
async function name([param[,param[,...param]]]){statements}
- name:表示函数名称
- param:要传递给函数的参数的名称
- statements:表示函数体语句
区别:
在于异步函数表达式可以省略函数名称来创建一个匿名函数。
返回Promise对象
async 函数返回一个 Promise对象。async,函数内部return语句返回的值,会成为then方法回调函数的参数。
//async函数返回Promise对象
async function myAsync() {
return 'Hello World'
}
let promise = myAsync();
promise.then((value) => {
console.log(value) //Hello World
})
await表达式
用于等待一个Promnise 对象,它只能在异步函数异步函数中使用。
[return_value]=await expression;
- expression:一个Promise对象或者任何要等待的值
- return_value:返回Promise对象的处理结果。如果等待的不是Promise对象,则返回该值本身。
function createPromise() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('执行成功了...')
}, 200)
})
}
async function myAsync() {
console.log('当前异步函数被调用了..')
var result = await createPromise()
console.log('Promise对象执行的结果:' + result)
}
myAsync();
错误处理
我们可以用try catch语句进行预处理
function createPromise() {
return new Promise((resolve, reject) => {
setTimeout(() => {
reject('执行报错了...')
}, 200)
})
}
async function myAsync() {
console.log('当前异步函数被调用了..')
try {
var result = await createPromise()
} catch (e) {
console.log('Promise对象执行的结果:' + e)
}
}
myAsync();
async函数执行Promise
async函数执行一组Promise输出结果跟时间没有关系,跟await的先后位置有关系
let promise1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('one')
}, 100)
})
let promise2 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('two')
}, 200)
})
let promise3 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('three')
}, 300)
})
async function myAsync() {
let result1 = await promise3;
console.log(result1) //three
let result2 = await promise2;
console.log(result2) //two
let result3 = await promise1;
console.log(result3) //one
}
myAsync()
注意事项
使用try…catch语句
await命令后面的Promise对象,运行结果可能是rejected,所以最好把 await表达式放置在try…catch 代码块中。
多个await同时触发
多个await表达式后面的异步操作,如果不存在继发关系,最好让它们同时触发。
await表达式的限制
await表达式只能用在 async函数之中,如果用在普通函数,就会报错。