首先是async/await
风格的promise
我理解的流程:
- 进入
async1()
, 在其内部调用async2()
async2()
内部没有异步代码,所以执行后会回到await
处, 然后将下面的代码console.log('async1 end')
注册在微任务队列里async1()
流程结束- 进入
Promise()
, 执行resolve()
, 执行then()
注册微任务 - 同步代码结束,执行微任务队列的回调函数
- 依次执行
console.log('async1 end')
,console.log('promise2')
async function async1() {
await async2();
console.log('async1 end');
}
async function async2() {
return new Promise(resolve => {
console.log('async2 promise');
resolve(32);
// 这里的同步代码结束后流程会回到调用async2处
// 然后把下边的 console.log('async1 end') 注册为 微任务吧?
})
}
async1();
new Promise(resolve => {
resolve();
}).then(() => {
console.log('promise2');
})
// 以下是结果
// async2 promise
// promise2
// async1 end
下面这个是我所认为的逻辑上相同的then
的写法
function async1() {
async2().then(() => {
console.log('async1 end');
})
}
function async2() {
return new Promise(resolve => {
console.log('async2 promise');
resolve(32);
})
}
async1();
new Promise(resolve => {
resolve();
}).then(() => {
console.log('promise2');
})
// async2 promise
// async1 end
// promise2
为了方便比较,我放在了一张图片里