Promise.all()

La méthode Promise.all() renvoie une promesse (Promise) qui est résolue lorsque l'ensemble des promesses contenues dans l'itérable passé en argument ont été résolues ou qui échoue avec la raison de la première promesse qui échoue au sein de l'itérable.

Syntaxe

Promise.all(iterable);
iterable
Un objet itérable (tel qu'un tableau (Array)) contenant des promesses.

Valeur de retour

Un objet Promise qui est

  • résolu lorsque l'ensemble des promesses de l'itérable ont été résolues
  • ou qui échoue si l'une des promesses de l'itérable échoue.

Description

Cette méthode peut être utile lorsqu'on souhaite agréger le résultat de plusieurs promesses.

Valeur de résolution
Si toutes les promesses de l'itérable sont tenues, Promise.all est tenue et la valeur de résolution est un tableau qui contient les valeurs de résolution respectives des promesses de l'itérable (dans le même ordre). Si l'argument utilisé est un tableau vide, la méthode résoud la promesse immédiatement.
Valeur d'échec
Si l'une des promesses de l'itérable échoue, Promise.all échoue immédiatement et utilise la raison de l'échec (que les autres promesses aient été résolues ou non).

Exemples

Utiliser Promise.all()

Promise.all() attend que l'ensemble des promesses soient tenues ou qu'une promesse soit rompue :

var p1 = Promise.resolve(3);
var p2 = 1337;
var p3 = new Promise((resolve, reject) => {
  setTimeout(resolve, 100, 'foo');
}); 

Promise.all([p1, p2, p3]).then(values => { 
  console.log(values); // [3, 1337, "foo"] 
});

Promise.all(), un échec rapide

La promesse créée par Promise.all() échoue immédiatement si l'une des promesses échoue. Dans l'exemple suivant, on fournit quatre promesses qui sont résolues après une certaine durée et une autre promesse qui est rompue immédiatement : on peut alors voir que la promesse créée par Promise.all() est rompue immédiatement.

var p1 = new Promise((resolve, reject) => { 
  setTimeout(resolve, 1000, 'un'); 
}); 
var p2 = new Promise((resolve, reject) => { 
  setTimeout(resolve, 2000, 'deux'); 
});
var p3 = new Promise((resolve, reject) => {
  setTimeout(resolve, 3000, 'trois');
});
var p4 = new Promise((resolve, reject) => {
  setTimeout(resolve, 4000, 'quatre');
});
var p5 = new Promise((resolve, reject) => {
  reject('rejet');
});

Promise.all([p1, p2, p3, p4, p5]).then(values => { 
  console.log(values);
}, reason => {
  console.log(reason)
});

// Dans la console :
// "rejet"

//On peut aussi employer .catch
Promise.all([p1, p2, p3, p4, p5]).then(values => { 
  console.log(values);
}).catch(reason => { 
  console.log(reason)
});

// Dans la console : 
// "rejet"

Spécifications

Spécification État Commentaires
ECMAScript 2015 (6th Edition, ECMA-262)
La définition de 'Promise.all' dans cette spécification.
Standard Définition initiale dans un standard ECMA.
ECMAScript 2017 Draft (ECMA-262)
La définition de 'Promise.all' dans cette spécification.
Projet  

Compatibilité des navigateurs

Fonctionnalité Chrome Edge Firefox Internet Explorer Opera Safari Servo
Support simple32.0(Oui)29.0Aucun support197.1Aucun support
Fonctionnalité Android Chrome for Android Edge Mobile Firefox for Android IE Mobile Opera Mobile Safari Mobile
Support simple4.4.432.0(Oui)29Aucun support(Oui)8.0

Voir aussi

Étiquettes et contributeurs liés au document

 Contributeurs à cette page : SphinxKnight, danyd4n, HlodowigRaginwald, mehdichamouma, Kerumen
 Dernière mise à jour par : SphinxKnight,