- async用来声明一个异步方法
- await是用来等待异步方法执行
- async 函数返回一个pormise对象
function f() {return Promise.resolve('test')}
async function f() {return 'test'}
- await
- 返回的是promise的结果,如果后面跟着不是primose对象,则直接返回该结果
- 具有阻塞性,后面的代码会进入微任务,必须等到await后面跟着的primose对象执行完毕(resolve/reject)后才能执行后面的微任务
async function f1() {
console.log(1)
await f2()
console.log(2)
}
async function f2 () {
console.log('f2')
}
f1()
console.log(3)
- 核心点
- async立马返回promise.resolve()并执行里面的同步代码
- await 后面的代码会被打包到微任务中
- f2函数执行完毕之后f1函数暂停执行,开始继续执行f1函数下面的同步任务
- 同步任务执行完之后再执行f1函数中的微任务
async function f1() {
console.log(1)
await f2()
console.log(2)
}
async function f2 () {
setTimeout(() => {
console.log('f22')
}, 1000)
}
f1()
console.log(3)
- 核心点
- async立马返回promise.resolve(),f2函数中setTimeout函数进入宏任务队列
- f2函数返回promise之后并不会等setTimeout执行完,f1函数里面await后面的代码进入微任务
- f1函数暂停执行,此时开始执行f1函数下面的同步任务
- 同步任务执行完,开始执行f1中的微任务
- 微任务执行完,再开始执行宏任务setTimeout
async function f1() {
console.log(1)
await f2()
console.log(2)
}
async function f2 () {
await setTimeout(() => {
console.log('f22')
}, 1000)
}
f1()
console.log(3)
async function f1() {
console.log(1)
await f2()
console.log(2)
}
async function f2 () {
await new Promise(function(resolve) {
resolve(
setTimeout(() => {
console.log('f22')
}, 1000)
)
})
}
f1()
console.log(3)
async function f1() {
console.log(1)
await f2()
console.log(2)
}
async function f2 () {
await new Promise(function(resolve) {
setTimeout(() => {
resolve(console.log('f22'))
}, 1000)
})
}
f1()
console.log(3)
async function f1() {
console.log(1)
await f2()
console.log(2)
}
async function f2 () {
await new Promise(function(resolve) {
setTimeout(() => {
resolve(console.log('f22'))
}, 1000)
})
}
await f1()
console.log(3)