如何将Promise.all链接到其他Promise?

时间:2016-04-21 03:27:05

标签: javascript es6-promise

我想按以下顺序执行我的代码:

  1. 承诺1
  2. 等待1完成,然后同时做2 + 3
  3. 最终功能等待Promise 2 + 3完成
  4. 我在搞清楚方面遇到了一些麻烦,到目前为止,我的代码还在下面。

    function getPromise1() {
      return new Promise((resolve, reject) => {
        // do something async
        resolve('myResult');
      });
    }
    
    function getPromise2() {
      return new Promise((resolve, reject) => {
        // do something async
        resolve('myResult');
      });
    }
    
    function getPromise3() {
      return new Promise((resolve, reject) => {
        // do something async
        resolve('myResult');
      });
    }
    
    getPromise1()
    .then(
      Promise.all([getPromise2(), getPromise3()])
      .then() // ???
    )
    .then(() => console.log('Finished!'));
    

2 个答案:

答案 0 :(得分:41)

只需返回Promise.all(...

getPromise1().then(() => {
  return Promise.all([getPromise2(), getPromise3()]);
}).then((args) => console.log(args)); // result from 2 and 3

答案 1 :(得分:9)

我知道这是一个旧线程,但不是

() => {return Promise.all([getPromise2(), getPromise3()]);}
有点多余?胖箭的想法是你可以把它写成:

() => Promise.all([getPromise2(), getPromise3()])

使得结果代码更加清晰:

getPromise1().then(() => Promise.all([getPromise2(), getPromise3()]))
.then((args) => console.log(args)); // result from 2 and 3

无论如何,谢谢你的回答,我坚持这个:)