Método JavaScript Array.fromAsync()
Ejemplo
Crear un array desde un objeto asíncrono iterable:
Pruébalo »
Definición y uso
Array.fromAsync() es un método estático relativamente nuevo en JavaScript que te permite crear un nuevo array a partir de un objeto asíncrono iterable, un objeto iterable o un objeto similar a un array. Este método devuelve una Promise que se resuelve en una nueva instancia de array.
En términos simples, es la versión asíncrona de Array.from(), diseñada específicamente para manejar fuentes de datos asíncronas.
Sintaxis básica
Array.fromAsync(iterable)
Array.fromAsync(arrayLike)
Array.fromAsync(asyncIterable, mapFn)
Array.fromAsync(asyncIterable, mapFn, thisArg)
Descripción de parámetros
asyncIterable: un objeto asíncrono iterable (como un generador asíncrono)iterable: un objeto iterable (como un array, cadena, Set, etc.)arrayLike: un objeto similar a un array (un objeto con propiedad length y elementos indexados)mapFn(opcional): una función de mapeo que se llama para cada elementothisArg(opcional): un valor que se usa como this al ejecutar mapFn
Valor de retorno
Devuelve una Promise que se resuelve en un nuevo array.
Soporte del navegador
Array.fromAsync() es una característica relativamente nueva; actualmente (hasta 2023) solo se admite en versiones más recientes de navegadores:
- Chrome 117+
- Firefox 115+
- Safari 16.4+
- Node.js 21+
Para entornos que no lo admiten, puedes usar un polyfill o implementar una funcionalidad similar por tu cuenta.
Los números en la tabla indican la primera versión del navegador que admite este método.
| Método | |||||
|---|---|---|---|---|---|
| fromAsync() | 117+ | 121+ | 115+ | 16.4+ | 81.0+ |
Ejemplos de uso
Ejemplo 1: Crear un array desde un generador asíncrono
Ejemplo
yield 1;
yield 2;
yield 3;
}
(async () => {
const result = await Array.fromAsync(asyncGenerator());
console.log(result); // Salida: [1, 2, 3]
})();
Ejemplo 2: Crear un array desde un objeto iterable normal
Ejemplo
(async () => {
const result = await Array.fromAsync(set);
console.log(result); // Salida: [1, 2, 3]
})();
Ejemplo 3: Usar una función de mapeo
Ejemplo
yield 1;
yield 2;
yield 3;
}
(async () => {
const result = await Array.fromAsync(asyncNumbers(), x => x * 2);
console.log(result); // Salida: [2, 4, 6]
})();
Diferencias con Array.from()
Aunque Array.fromAsync() y Array.from() parecen similares, tienen varias diferencias clave:
1. Manejo de fuentes de datos asíncronas
Array.fromAsync() puede manejar objetos asíncronos iterables, mientras que Array.from() no puede.
2. Valor de retorno
Array.from() devuelve un array directamente, mientras que Array.fromAsync() devuelve una Promise.
3. Momento de ejecución
Array.from() se ejecuta de forma síncrona, mientras que Array.fromAsync() se ejecuta de forma asíncrona.
Casos de uso práctico
Escenario 1: Manejo de datos de API paginados
Ejemplo
let page = 1;
while (true) {
const response = await fetch(`https://api.example.com/data?page=${page}`);
const data = await response.json();
if (data.length === 0) break;
yield* data;
page++;
}
}
(async () => {
const allData = await Array.fromAsync(paginatedFetcher());
console.log(allData); // Los datos de todas las páginas se combinan en un solo array
})();
Escenario 2: Manejo de resultados de múltiples operaciones asíncronas
Ejemplo
Promise.resolve(1),
Promise.resolve(2),
Promise.resolve(3)
];
(async () => {
const results = await Array.fromAsync(promises);
console.log(results); // Salida: [1, 2, 3]
})();
Resumen
Array.fromAsync() es una herramienta poderosa, especialmente adecuada para manejar colecciones de datos asíncronos. Simplifica el proceso de crear arrays desde fuentes de datos asíncronas, haciendo que el código sea más claro y fácil de mantener. Aunque el soporte de los navegadores aún no está muy extendido, con el tiempo se convertirá en uno de los métodos estándar para manejar colecciones de datos asíncronas.
¡Recuerda, cuando necesites crear un array desde una fuente de datos asíncrona, Array.fromAsync() es un gran aliado!
Otras extensiones
Objeto JavaScript Array