java script js new promise 对象时,执行顺序问题

发布时间 2023-06-28 17:02:12作者: 夏几把狂舞

当你用一个变量接收一个new promise对象时,对象构造函数中的方法会立刻执行,

比如

var p1 = new Promise((resolve, reject)=>{

  setTimeout(()=>{

    console.log('执行P1');

    resolve('P1返回值');

  }, 2000);

})

var p2 = new Promise((resolve, reject)=>{

  setTimeout(()=>{

    console.log('执行P2');

    resolve('P2返回值');

  }, 1000);

})

p1.then((ret)=>{

  console.log(ret);

  return p2;

}).then((ret)=>{

  console.log(ret);

})

执行上述代码,你会发现P1P2同时执行了,而且先打印的P2执行,但是返回值的打印顺序是对的。

我们可能希望去序列化执行P1P2,等P1执行完了,打印P1返回值,再到P2执行完了,打印P2返回值。

我们只需要简单的改变一下P1/P2的声明方式,将new Promise 语句产生的对象封装一个函数并返回去,再.then的时候再执行就可以了。如下:

var p1 = function(){

  return new Promise((resolve, reject)=>{

    setTimeout(()=>{

      console.log('执行P1');

      resolve('P1返回值');

    }, 2000);

  })

}

  

var p2 = function(){

  return new Promise((resolve, reject)=>{

    setTimeout(()=>{

      console.log('执行P2');

      resolve('P2返回值');

    }, 1000);

  })

}

p1().then((ret)=>{

  console.log(ret);

  return p2();

}).then((ret)=>{

  console.log(ret);

})

 打印结果如下图