async
async函数是异步的一种方案,可以让异步的操作同步执行
在函数前加上关键字async 表示该函数是一个async 函数
async函数返回一个 Promise 对象,可以使用then方法添加回调函数
const fn1 = async () => {
return 1111
};
let result = fn1()
console.log(result)//打印出来是一个Promise对象
result.then(res=>{
console.log(res) //输出 1111
})
当 async 函数没有返回值时,返回 Promise.resolve(undefined)
await
await只能放在async函数内部使用
await 用于一个异步操作之前,表示要“等待”这个异步操作的返回值
const fn1 = async () => {
return 1111
};
const fn2 = async() => {
await fn1()
console.log(2222)
}
fn2()
//输出 1111 2222
await后面可以跟Promise,和其他类型的数据
当跟的是Promise时,值是执行成功的返回值。
如果是其他数据时,返回值是await 表达式的运算结果
async/await的并发调用
如果在函数中,多次使用await会使多个异步任务逐个执行,如果实际需求,异步函数直接不存在继发关系,这样会增加程序的执行时间,因此需要将它们同时触发,并发调用,提高效率
以下借鉴于阮一峰大神的es6入门
//第一种
async function fun(){
let fooFun = fun1();
let barFun = fun2();
let foo = await fooFun;
let bar = await barFun;
}
//第二种
let [foo,bar] = await Promise.all([fun1(),fun2()])
注意点
- await命令后面的Promise对象,运行结果可能是rejected,所以最好把await命令放在try...catch代码块中
- await命令只能用在async函数之中,如果用在普通函数,就会报错任何一个await语句后面的
- Promise 对象变为reject状态,那么整个async函数都会中断执行