Promise输出顺序问题

题目描述

Promise输出顺序问题

题目来源及自己的思路

问题1:为什么输出async2 之后输出promise1
问题2: 在输出script end执行后为什么输出了promise 1
问题三 为什么promise 1 后输出了 promise2

相关代码

粘贴代码文本(请勿用截图)

    console.log('start')
    const interval = setInterval(()=>{
      console.log('setInterval')
    },0)
    var num = 0
    clearInterval(interval)
    Promise.resolve()
    .then(()=>{
        num = num+10086
      console.log('promise 1')
    })
    .then(()=>{
        console.log(num)
      console.log('promise 2')
    })
    /*. */
    console.log('=================') 
    
    async function async1 () {
        console.log('async1 start');
        let a = await async2();
        await async3(a);
        console.log('async1 end');
    }
    
    async function async2 () {
        console.log('async2');
        return Promise.resolve("hello async");

    }
    async function async3 (n) {
        console.log(n)
        console.log('async3');

    }
    console.log('script start');
    
    setTimeout(function () {
        console.log('setTimeout');
    }, 0);
    
    async1();
    
    new Promise((resolve)=> {
        console.log('promise1');
        resolve();
    }).then(function () {
        console.log('promise2');
    });
    console.log('script end');

你期待的结果是什么?实际看到的错误信息又是什么?

没搞懂Promise输出循序? 请大佬讲解下 谢谢

阅读 3.1k
1 个回答

建议先了解下 eventloop 再来看以下回答
大佬连接在这
https://segmentfault.com/a/11...
问题 1 async2 其实是同步执行的

async function async1(){

await async2()

}

等价于


async function async1() {

return new Promise(resolve => {

resolve(async2())

}).then(() => {


})

}

所以 打印"async2"是同步的

问题 2
因为 script end 是同步任务
而第一个 promise1 是第一个 microtask

问题3
原理同问题 2

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏