关于嵌套Promise的执行顺序,大佬帮帮忙

EvilDragon
  • 6

主要是嵌套Promise的问题

this.pro(this.pro3());
this.pro11().then(res => this.pro22().then(res => {this.pro33()}))
  
  pro(fn) {
    this.pro1().then(res => this.pro2().then(res => {fn}))
  },

  pro1(){
    return new Promise((resolve,reject)=>{
      setTimeout(() => {
        console.log("Promise1", Date.now());
        resolve();
      }, 1000);
    })
  },
  pro2(){
    return new Promise((resolve,reject)=>{
      setTimeout(() => {
        console.log("Promise2", Date.now());
        resolve();
      }, 1000);
    })
  },
  pro3(){
    console.log("Promise3", Date.now());
  },
  pro11(){
    return new Promise((resolve,reject)=>{
      setTimeout(() => {
        console.log("11Promise11", Date.now());
        resolve();
      }, 1000);
    })
  },
  pro22(){
    return new Promise((resolve,reject)=>{
      setTimeout(() => {
        console.log("22Promise22", Date.now());
        resolve();
      }, 1000);
    })
  },
  pro33(){
    console.log("33Promise33", Date.now());
  }

执行的结果是

Promise3 1627545487809
Promise1 1627545488815
11Promise11 1627545488817
Promise2 1627545489817
22Promise22 1627545489818
33Promise33 1627545489818

我只是把pro3通过参数的方式传进去,为什么执行顺序完全不一样,并且是优先执行

回复
阅读 555
1 个回答
✓ 已被采纳

从你的代码上来看,pro需要的参数是一个函数,而你传的是this.pro3(),这是函数调用,所以会第一个执行,并把结果undefined传给pro,正确的写法应该是this.pro(this.pro3);

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