web-dev-qa-db-fra.com

Comment enchaîner un Promise.all avec d'autres promesses?

Je veux exécuter mon code dans l'ordre suivant:

  1. Promesse 1
  2. Attendez que 1 soit fait, puis faites la promesse 2 + 3 en même temps
  3. La fonction finale attend que la promesse 2 + 3 soit terminée

J'ai du mal à le comprendre, mon code jusqu'à présent est ci-dessous.

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

Retournez simplement Promise.all(...

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

Je sais que c'est un vieux fil, mais n'est pas

() => {return Promise.all([getPromise2(), getPromise3()]);}

un peu superflu? L'idée de la grosse flèche est que vous pouvez l'écrire comme:

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

ce qui rend le code résultant un peu plus clair:

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

Quoi qu'il en soit, merci pour la réponse, j'étais coincé avec ça :)

10
Polakko