关于js事件执行机制event loop的一道面试题

发布于 2022-09-12 02:59:16 字数 797 浏览 13 评论 0

`

async function async1 () {
    console.log('async1')
    await async2()
    console.log('async1-2')
}
async function async2 () {
    console.log('async2');
    return Promise.resolve().then(() => {
        console.log('async2-2')
    });
}

console.log(1)

async1()

setTimeout(() => {
    console.log('setTimeout')
},0)

new Promise((resolve, reject) => {
    console.log('promise1')
    resolve()
    console.log('promise4')
}).then(data => {
    console.log('promise3')
})

console.log(2)`

执行结果是:
1
async1
async2
promise1
promise4
2
async2-2
promise3
async1-2
setTimeout

关于 倾斜加粗 的部分我不是很理解,有谁可以解答下吗?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

烟酒忠诚 2022-09-19 02:59:16
  1. async2。 先忽略 await、async ,我们来看看这里应该怎么输出呢?还是同样输出对吧。

    1. 那么你的问题就变成了什么是 await、async
      我认为 async 声明这个方法是一个异步的,可以在里面 return 一个 promise
      await 呢,则是等待异步执行完成之后再执行后面的。可以理解为后面的代码都放入.then里面
  2. async2-2。 执行到这里的时候就直接push到微任务队列了。然后退出了async1方法,往下执行。
  3. promise3。 这是第二个push到微任务队列的。
  4. async1-1。 这里是在async2-2 执行完之后,才push到微任务队列的
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文