ES6-async(异步)/await(等待)
ES6-async(异步)/await(等待)
作用
-
async await 把异步操作以同步的形式进行显示 (本质还是异步操作)
-
生成异步,等待异步完成,实现异步代码的扁平化
-
async 函数返回的是一个 Promise 对象,如果在函数中
return
一个直接量,async 会把这个直接量通过Promise.resolve()
封装成 Promise 对象。
用法示例
//不加async await
function foo () {
Promise.resolve().then(resolve => {
console.log("1");
});
console.log(3);
}
foo();//3 1
在上面函数中,因为Promise是异步操作,所以会先执行主线任务,在执行异步任务所以结果先输出3,再输出1
//加了async await
async function foo () {
await Promise.resolve().then(resolve => {
console.log("1");
});
console.log(3);
}
foo();//1 3
加了async await,先表明这是一个异步函数,从任务队列中开始向下执行,碰到await,就是先等待异步任务执行完毕,再向下执行
如何理解
1、async是异步的意思,await是等待的意思,async是声明一个异步函数,await是等待异步函数执行完毕;
await必须写在在async函数中;
async函数的执行可以在任何函数中;
2、 async 函数中可能会有 await 表达式,async 函数执行时,如果遇到 await 就会先暂停执行 ,等到触发的异步操作完成后,恢复 async 函数的执行并返回解析值。
3、 await针对所跟不同表达式的处理方式:
- Promise 对象:await 会暂停执行,等待 Promise 对象 resolve,然后恢复 async 函数的执行并返回解析值。
- 非 Promise 对象:直接返回对应的值。