```js
async function async1() {
  async2().then(() => {
    console.log('async1 end');
  });
}
async function async2() {
  return new Promise((resolve, reject) => {
    resolve();
  })
}

async1();
new Promise(function(resolve) {
  resolve();
}).then(function() {
  console.log('promise2');
})
```
输出结果为
```
promise2
async1 end
```

(面试时候遇到的,去掉了无关的 log)

想知道为什么 promise2 早于 async1 end ?

我的想法是 `async2()` 的 then 方法早于 `new Promise` 的 then 方法执行,那么其回调函数就应该先被放入微任务队列,也就应该先被执行,但实际情况不是这样。

另外,如果我把 `async1` 和 `async2` 的 `async` 关键字去掉,那么输出就变为
```
async1 end
promise2
```
求大佬解答
举报· 64 次点击
登录 注册 站外分享
2 条回复  
shizhibuyu2023 初学 2024-8-23 23:24:26
async 函数本身还会将返回的内容包一层 promise ,你把 async2 的 async 去掉或者直接 return undefined 才是你要的效果
xiangyuecn 初学 2024-8-23 23:37:55
看起来是 async2 的 async 影响了 then 的执行,只需去掉 async2 的 async 就符合脑回路了,看不懂的代码一律当做玄学处理😂
返回顶部