async和await
async 和 await
async 修饰函数,使普通函数变为异步函数。
异步函数:返回值为Promise对象的函数就是异步函数。
异步函数的函数体可使用await关键字,await后接一个Promise对象(如果后接一个普通对象await就会失效)。
async函数执行时,在遇到(有效)await关键字后,会立即返回。
async function fn1() {
console.log(1)
await new Promise((resolve, reject) => {
setTimeout(() => {
console.log(2)
resolve()
}, 1000)
})
console.log(3)
}
fn1()
console.log(4)
// 1
// 4
// 2
// 3
异步函数的对内的表现是同步,对外的表现是异步
此外,await还可以把promise对象的值解析出来。
async function fn1() {
console.log(1)
await new Promise((resolve, reject) => {
// setTimeout(() => {
// console.log(2)
// resolve()
// }, 3000)
console.log(2)
resolve()
})
console.log(3)
}
fn1()
console.log(4)
// 1,2,4,3
其实真正的步骤应该是await等Promise对象内部执行完才返回,上面的本质是下面这段代码:
await new Promise(() => {
// ...
}).then(() => {
console.log(3)
})
可以这么理解:第一个await使函数立即返回,后面的await用于提取Promise包裹的值。

浙公网安备 33010602011771号