Estoy tratando de obtener diferentes estadísticas de colección e iterar a través de ellas usando un bucle for para designar qué colección quiero recuperar. Quiero empujar cada colección a otra matriz y devolver esa matriz de colecciones.
export async function getNFTSales() { const collections = [ 'cryptopunks', 'boredapeyachtclub', 'mutant-ape-yacht-club', ]; const newNFTArray = []; try { Promise.all( collections.forEach(collection => { fetch(`https://api.opensea.io/api/v1/collection/${collection}/stats`) .then(response => response.json()) .then(response => { response.forEach(nftArray => { newNFTArray.push(nftArray); }); }); return newNFTArray; }), ); } catch (error) { throw error; } }El newNFTArray.push nunca se llama. ¿Debo estar perdiendo un paso a través de una de las iteraciones?
La matriz de objetos de respuesta:
{ "stats": { "one_day_volume": 560.27, "one_day_change": -0.2779002178143809, "one_day_sales": 8, "one_day_average_price": 70.03375, "seven_day_volume": 10322.029999999999, "seven_day_change": 0.45140486499035165, "seven_day_sales": 139, "seven_day_average_price": 74.25920863309352, "thirty_day_volume": 39963.36100000096, "thirty_day_change": 0.2829772043143385, "thirty_day_sales": 476, "thirty_day_average_price": 83.95664075630454, "total_volume": 767357.0922492892, "total_sales": 18341, "total_supply": 9999, "count": 9999, "num_owners": 3296, "average_price": 41.83834536008337, "num_reports": 7, "market_cap": 742517.827122302, "floor_price": null } }Asigne la colección que devuelve promesas para que se ejecute Promise.all .
export async function getNFTSales() { const collections = [ 'cryptopunks', 'boredapeyachtclub', 'mutant-ape-yacht-club', ]; try { const promises = collections.map(collection => { // note the map // note the return return fetch(`https://api.opensea.io/api/v1/collection/${collection}/stats`) .then(response => response.json()); }); results = await = Promise.all(promises); // if each promise results in an array, results will be an array of arrays // flat() will put all the elements of all the arrays into one (I guessed that the OP wants this) return results.flat(); } // note - removed catch. A catch that just throws doesn't do anything }Llamador:
async function theCallingFunction() { const newNFTArray = await getNFTSales(); console.log(newNFTArray); }