zoukankan      html  css  js  c++  java
  • 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状态一旦改变就不会再变化了。
     
  • 相关阅读:
    Ext.form.RadioGroup
    Ext:ComboBox实战
    Ext.Ajax.request
    下拉菜单
    为Ext添加下拉框和日期组件
    点击grid单元格弹出新窗口
    好用的sql
    数据库连接池总是断开
    POI 自用API
    String 操作
  • 原文地址:https://www.cnblogs.com/niwalala/p/15407449.html
Copyright © 2011-2022 走看看