Devolver objeto de Promise.all(…)
Estoy usando una API para recuperar datos (de varios aeropuertos), basados en sus códigos de aeropuerto…
async function airpt(codes){
const airportCredential = {
"method": "GET",
"headers": {
"x-rapidapi-host": "airport-info.p.rapidapi.com",
"x-rapidapi-key": "xxxx"
}
}
return Promise.all(
codes
.map(code =>
fetch("https://airport-info.p.rapidapi.com/airport?iata="+code,airportCredential)
.then(r => r.json())
)
);
}
Una llamada como airpt(['JFK','LAX']
produce un array con resultados como este:
Array(2)
0: {id: 3406, iata: 'JFK', icao: 'KJFK', name: 'John F. Kennedy International Airport', location: 'New York City, New York, United States', …}
1: {id: 4044, iata: 'LAX', icao: 'KLAX', name: 'Los Angeles International Airport', location: 'Los Angeles, California, United States', …}
length: 2
Eso funciona bien. Pero ¿cómo devolvería una única promesa desde esta función con todos los datos empaquetados en un objeto, que utiliza los valores de entrada codes
como claves?
Sé cómo transformar el array en un objeto:
array.reduce((obj, item) => {
return {
...obj,
[item['iata']]: item,
};
}, {});
Sé cómo hacerlo, usando .then(...)
después de que Promise.all()
se haya resuelto. Sin embargo, me gustaría tener el reempaquetado en un objeto como parte de la función asíncrona.
davy.ai
Para empaquetar los datos en un objeto con
codes
como claves, puede modificar la llamada dePromise.all
para mapear los resultados a un objeto con el código como clave:Esta función modificada primero espera el resultado de
Promise.all
y lo almacena enresults
. Luego usareduce
para transformar el array deresults
en un objeto concodes
como claves. Finalmente, devuelve el objetodata
como una promesa única.