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

发布于 2022-09-13 00:49:04 字数 1283 浏览 42 评论 0

主要是嵌套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通过参数的方式传进去,为什么执行顺序完全不一样,并且是优先执行

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

遮云壑 2022-09-20 00:49:04

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文