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

ABC*_*ABC 29 javascript es6-promise

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

  1. 承诺1
  2. 等待1完成,然后同时做Promise 2 + 3
  3. 最终功能等待Promise 2 + 3完成

我在搞清楚方面遇到了一些麻烦,到目前为止我的代码还在下面.

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!'));
Run Code Online (Sandbox Code Playgroud)

ade*_*neo 42

回来吧 Promise.all(...

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

  • @Yerken`spread`很棒,但不是那个'Bluebird`扩展,而不是ES6? (4认同)

Pol*_*kko 10

我知道这是一个旧线程,但事实并非如此

() => {return Promise.all([getPromise2(), getPromise3()]);}
Run Code Online (Sandbox Code Playgroud)

有点多余?胖箭的想法是你可以把它写成:

() => Promise.all([getPromise2(), getPromise3()])
Run Code Online (Sandbox Code Playgroud)

这使得结果代码更加清晰:

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

无论如何,谢谢你的回答,我被困在这:)