| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Global_Objects/Array/fromAsync | [Back] [Original] |
Get to know MDN better
Cette page a t traduite partir de l'anglais par la communaut. Vous pouvez contribuer en rejoignant la communaut francophone sur MDN Web Docs.
Cette fonctionnalit est bien tablie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis janvier 2024.
La mthode statique Array.fromAsync() cre une nouvelle instance de Array (copie superficielle) partir d'un objet itrable asynchrone, d'un objet itrable, ou d'un objet semblable un tableau.
Array.fromAsync(items)
Array.fromAsync(items, mapFn)
Array.fromAsync(items, mapFn, thisArg)
itemsUn objet itrable asynchrone, itrable ou semblable un tableau convertir en tableau.
mapFn FacultatifUne fonction appele sur chaque lment du tableau. Si elle est fournie, chaque valeur ajouter au tableau est d'abord transmise cette fonction, et la valeur de retour de mapFn est ajoute au tableau la place (aprs avoir t attendue). La fonction est appele avec les arguments suivants :
elementL'lment en cours de traitement dans le tableau. Si items est un itrable synchrone ou un objet semblable un tableau, tous les lments sont d'abord attendus, et element n'est jamais une semi-promesse. Si items est un itrable asynchrone, chaque valeur produite est transmise telle quelle.
indexL'indice de l'lment en cours de traitement dans le tableau.
thisArg FacultatifLa valeur utiliser comme this lors de l'excution de la fonction mapFn.
Une nouvelle promesse (Promise) dont la valeur de retour est une nouvelle instance de Array.
Array.fromAsync() permet de crer des tableaux partir :
ReadableStream et AsyncGenerator) ; ou, si l'objet n'est pas un itrable asynchrone,Map et Set) ; ou, si l'objet n'est pas itrable,length et des lments indexs).Array.fromAsync() parcourt l'itrable asynchrone d'une manire trs similaire for await...of. Array.fromAsync(items) est gnralement quivalent au code suivant, si items est un itrable asynchrone ou synchrone :
const resultat = [];
for await (const element of items) {
resultat.push(element);
}
Array.fromAsync() est presque quivalent Array.from() en termes de comportement, l'exception des points suivants :
Array.fromAsync() gre les objets itrables asynchrones.Array.fromAsync() retourne une promesse (Promise) qui se rsout en une instance de tableau.Array.fromAsync() est appele avec un objet itrable non asynchrone, chaque lment ajout au tableau est d'abord attendu.mapFn est fourni, sa sortie est galement attendue en interne.Array.fromAsync() et Promise.all() peuvent toutes deux transformer un itrable de promesses dans une promesse d'un tableau. Cependant, il existe deux diffrences majeures :
Array.fromAsync() attend chaque valeur produite par l'objet de faon squentielle. Promise.all() attend toutes les valeurs en parallle.Array.fromAsync() parcourt l'itrable de faon diffre, et ne rcupre la valeur suivante que lorsque la prcdente est rsolue. Promise.all() rcupre toutes les valeurs l'avance et les attend toutes.const asyncIterable = (async function* () {
for (let i = 0; i < 5; i++) {
await new Promise((resolve) => setTimeout(resolve, 10 * i));
yield i;
}
})();
Array.fromAsync(asyncIterable).then((array) => console.log(array));
// [0, 1, 2, 3, 4]
Lorsque items est un itrable asynchrone dont chaque rsultat value est aussi une promesse, ces promesses sont ajoutes au tableau rsultant sans tre attendues. Cela correspond au comportement de for await...of.
function createAsyncIter() {
let i = 0;
return {
[Symbol.asyncIterator]() {
return {
async next() {
if (i > 2) return { done: true };
i++;
return { value: Promise.resolve(i), done: false };
},
};
},
};
}
Array.fromAsync(createAsyncIter()).then((array) => console.log(array));
// (3) [Promise, Promise, Promise]
Note :
En pratique, il est rare de rencontrer un objet itrable asynchrone qui produit des promesses, car si vous l'implmentez avec une fonction gnratrice asynchrone, l'expression yield dsempaqute automatiquement les promesses.
Array.fromAsync(
new Map([
[1, 2],
[3, 4],
]),
).then((array) => console.log(array));
// [[1, 2], [3, 4]]
Array.fromAsync(
new Set([Promise.resolve(1), Promise.resolve(2), Promise.resolve(3)]),
).then((array) => console.log(array));
// [1, 2, 3]
Array.fromAsync({
length: 3,
0: Promise.resolve(1),
1: Promise.resolve(2),
2: Promise.resolve(3),
}).then((array) => console.log(array));
// [1, 2, 3]
mapFn avec un objet itrable synchroneLorsque items est un itrable synchrone ou un objet semblable un tableau, l'entre et la sortie de mapFn sont attendues en interne par Array.fromAsync().
function delayedValue(v) {
return new Promise((resolve) => setTimeout(() => resolve(v), 100));
}
Array.fromAsync(
[delayedValue(1), delayedValue(2), delayedValue(3)],
(element) => delayedValue(element * 2),
).then((array) => console.log(array));
// [2, 4, 6]
mapFn avec un objet itrable asynchroneLorsque items est un itrable asynchrone, l'entre de mapFn n'est pas attendue, mais la sortie l'est. En utilisant la mme fonction createAsyncIter que ci-dessus :
Array.fromAsync(createAsyncIter(), async (element) => (await element) * 2).then(
(array) => console.log(array),
);
// [2, 4, 6]
Curieusement, cela signifie que Array.fromAsync(createAsyncIter()) n'est pas quivalent Array.fromAsync(createAsyncIter(), (element) => element), car la seconde attend chaque valeur produite, alors que la premire ne le fait pas.
Array.fromAsync(createAsyncIter(), (element) => element).then((array) =>
console.log(array),
);
// [1, 2, 3]
Promise.all()Array.fromAsync() attend chaque valeur produite par l'objet de faon squentielle. Promise.all() attend toutes les valeurs en parallle.
function* makeIterableOfPromises() {
for (let i = 0; i < 5; i++) {
yield new Promise((resolve) => setTimeout(resolve, 100));
}
}
(async () => {
console.time("Array.fromAsync() time");
await Array.fromAsync(makeIterableOfPromises());
console.timeEnd("Array.fromAsync() time");
// Array.fromAsync() time: 503.610ms
console.time("Promise.all() time");
await Promise.all(makeIterableOfPromises());
console.timeEnd("Promise.all() time");
// Promise.all() time: 101.728ms
})();
Comme pour for await...of, si l'objet parcouru est un itrable synchrone et qu'une promesse produite est rejete, la mthode return() de l'itrateur sous-jacent est appele, si elle existe, afin de permettre l'itrateur d'effectuer son nettoyage.
function* generatorWithRejectedPromises() {
try {
yield 0;
yield Promise.reject(new Error("error"));
} finally {
console.log("appel final");
}
}
(async () => {
try {
await Array.fromAsync(generatorWithRejectedPromises());
} catch (e) {
console.log("caught", e);
}
})();
// appel final
// intercept Error: error
| Spcification |
|---|
| ECMAScript 2027 LanguageSpecification # sec-array.fromasync |
ArrayArray()Array.of()Array.from()for await...ofArray.fromAsync dans core-js (angl.)Cette page a t modifie le 4 sept. 2026 par les contributeurices du MDN.
Arrayat()concat()copyWithin()entries()every()fill()filter()find()findIndex()findLast()findLastIndex()flat()flatMap()forEach()includes()indexOf()join()keys()lastIndexOf()map()pop()push()reduce()reduceRight()reverse()shift()slice()some()sort()splice()toLocaleString()toReversed()toSorted()toSpliced()toString()unshift()values()with()[Symbol.iterator]()Object/FunctionCertaines parties de ce contenu sont protges par le droit d'auteur 19982026 des contributeurs individuels de mozilla.org. Contenu disponible sous une licence Creative Commons.
| Web Proxy Viewer | New URL | Original Page |