Promise : méthode statique allKeyed()
Expérimental: Il s'agit d'une technologie expérimentale.
Vérifiez attentivement le tableau de compatibilité des navigateurs avant de l'utiliser en production.
La méthode statique Promise.allKeyed() est similaire à Promise.all(), sauf que, au lieu d'utiliser des tableaux/itérables comme entrée/sortie, elle utilise des objets. Elle prend un objet où chaque clé propre est associée à une promesse, et retourne une seule Promise. Cette promesse retournée est complétée (fulfilled en anglais) lorsque toutes les promesses de l'entrée sont complétées, avec un objet des mêmes clés de correspondances aux valeurs de complétion correspondantes. Elle est rompue (rejected en anglais) lorsqu'une des promesses de l'entrée est rompue, avec la raison de ce premier rejet.
Comparé à Promise.all(), Promise.allKeyed() permet d'associer les résultats à des clés sémantiquement significatives, au lieu d'un ordre de tableau arbitraire qui peut être difficile à maintenir.
Syntaxe
Promise.allKeyed(object)
Paramètres
object-
Un objet. Toutes ses propriétés énumérables propres, que la clé soit une chaîne de caractères ou un symbole, doivent avoir des valeurs
Promise. Ces valeurs sont attendues, donc d'autres semi-promesses sont également complétées, tandis que les valeurs qui ne sont pas des semi-promesses sont retournées telles quelles.
Valeur de retour
Une promesse (Promise) qui est :
- Déjà complétée, si l'objet passé ne possède aucune propriété énumérable propre.
- Complétée de façon asynchrone, lorsque toutes les promesses de l'objet donné sont complétées. La valeur de complétion est un objet des valeurs de complétion, avec les mêmes clés dans le même ordre que l'objet donné, indépendamment de l'ordre de complétion. Si l'objet passé n'est pas vide mais ne contient aucune promesse en attente, la promesse retournée est toujours complétée de façon asynchrone (au lieu de synchrone).
- Rompue de façon asynchrone, si l'une des promesses de l'objet donné est rompue. La raison du rejet est la raison du rejet de la première promesse qui a été rompue.
Description
La méthode Promise.allKeyed() est l'une des méthodes de concurrence des promesses. Elle effectue le même type de tâche que Promise.all(). Cependant, la plupart du temps, vous n'avez pas déjà un tableau de promesses et vous avez simplement quelques opérations ad hoc à regrouper, donc vous les mettez dans un tableau puis vous les déstructurez immédiatement :
const [resultatA, resultatB, resultatC] = await Promise.all([
obtenirA(),
obtenirB(),
obtenirC(),
]);
Le problème avec cela est que vous devez maintenir la cohérence de l'ordre des deux côtés : si vous écrivez accidentellement [resultatA, resultatC, resultatB], votre code se casse.
La méthode de clé atténue le problème en associant chaque opération asynchrone à une clé sémantique :
const {
a: resultatA,
b: resultatB,
c: resultatC,
} = await Promise.allKeyed({
a: obtenirA(),
b: obtenirB(),
c: obtenirC(),
});
De cette façon, l'ordre n'a plus d'importance, et toute incohérence de nom est locale : écrire accidentellement b: resultatC est maintenant beaucoup plus facile à détecter !
Exemples
>Utiliser Promise.allKeyed()
La méthode Promise.allKeyed() prend un objet et traite toutes ses propres propriétés énumérables.
function repousse(value, timeout) {
return new Promise((res) => setTimeout(() => res(value), timeout));
}
const sym = Symbol();
const promesses = {
a: repousse("a", 500),
// Les propriétés Symbol sont traitées
[sym]: repousse("symbol", 300),
// Les propriétés imbriquées ne sont pas traitées ; cet objet entier est considéré comme
// une valeur déjà résolue et est retournée tel quel
nested: {
b: repousse("b", 100),
},
};
const resultat = await Promise.allKeyed(promesses);
console.log(resultat);
// {
// a: "a",
// [sym]: "symbol",
// nested: {
// b: <Promise>,
// },
// }
Pour plus d'exemples liés au comportement de concurrence commun à Promise.all() et Promise.allKeyed(), voir Promise.all().
Spécifications
| Spécification |
|---|
| Await Dictionary> # sec-promise.allkeyed> |
Compatibilité des navigateurs
Voir aussi
- La prothèse d'émulation de
Promise.allKeyeddanscore-js(angl.) - La prothèse d'émulation es-shims de
Promise.allKeyed(angl.) - L'objet
Promise - La méthode statique
Promise.allSettledKeyed() - La méthode statique
Promise.all()