• 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状态一旦改变就不会再变化了。
     
  • 相关阅读:
    读取assets下的文件
    ViewPager的图片轮播
    ImageLoader的用法
    qpp的客户端
    服务器
    webview的使用
    AsyncTask方法
    HttpClientDopost方法
    通过 httpclientget 方法 向服务器中请求数据
    viewpager滑动button按钮选项卡跟着变动颜色
  • 原文地址:https://www.cnblogs.com/niwalala/p/15407449.html
Copyright © 2020-2023  润新知