Promise执行顺序机制

   //promise执行顺序
      const first = () =>
        new Promise((resolve, reject) => {
                console.log(1);//1
                let p = new Promise((resolve, reject) => {
                        console.log(2);//2
                        setTimeout(() => {
                         console.log(6);//6
                         resolve(7) //7
                        }, 0);
                        resolve(4);
                     });
                resolve(5);
                p.then(arg => {
                    console.log('p.then'+arg);//4
                });
        });

      first().then(arg => {
        console.log('first.then'+arg);//5
      });
      console.log(3);//3
//这道题主要理解js执行机制。执行顺序123456

// 第一轮事件循环,先执行宏任务,主script,new Promise立即执行,输出 1,执行p这个new Promise操作,输出 2,发现setTimeout,将回调函数放入下一轮任务队列(Event Quene),p的then,暂且命名为then1,放入微任务队列,且first也有then,命名为then2,放入微任务队列。执行console.log(3),输出 3,宏任务执行结束。

// 再执行微任务,执行then1,输出 4,执行then2,输出 5。

// 第一轮事件循环结束,开始执行第二轮。第二轮事件循环先执行宏任务里面的,也就是setTimeout的回调,输出 6。resolve(7)不会生效,因为p的Promise状态一旦改变就不会再变化了。
 
posted @ 2021-10-14 17:01  泥娃拉拉  阅读(1334)  评论(0编辑  收藏  举报