web-dev-qa-db-ja.com

Promise.allを他の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!'));
28
ABC

Promise.all(...を返すだけです

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

私はそれが古いスレッドであることを知っていますが、そうではありません

() => {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

とにかく、答えてくれてありがとう、私はこれで立ち往生しました:)

10
Polakko