Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

219
Vistas
Iteración de ID para enviar en una llamada a la API

Tengo una serie de ID de monedas criptográficas que necesito enviar en una llamada a la API para obtener datos de cada moneda. ¿Cómo lo itero y envío una llamada a la API?

La matriz de ID que se almacena:

 const getIds = async () => { Axios.get( "https://api.coingecko.com/api/v3/coins/markets?vs_currency=usd&order=market_cap_desc&per_page=100&page=1&sparkline=false" ).then((response) => setCoinIds((coinIds) => [ ...coinIds, ...response.data.map((res) => res.id), ]) ); };

La API de detalles de la moneda. El {coin_id} es donde necesito iterar y enviar llamadas de API contra cada ID.

 export const getCoinsData = async () => { try { const response = await Axios.get( "https://api.coingecko.com/api/v3/coins/${coin_id)" ); return response.data; } catch (e) { console.log(e); } };

Al final, necesito almacenar todos los datos de monedas en un objeto colectivo:

 const fetchCoinData = async () => { setLoading(true); const fetchedCoinData = await getCoinsData(); setData(fetchedCoinData); setLoading(false); };
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Usar la API de CoinGecko de forma recursiva cuando está en una versión gratuita es un poco complicado. Si revisa esta documentación de la API , verá una declaración que dice que tienen un límite de velocidad para sus llamadas a la API.

Our Free API* has a rate limit of 50 calls/minute.

He reescrito un código de trabajo para buscar todas las monedas y obtener sus ID, luego llamo recursivamente a la API de CoinGecko para esas ID con un intervalo de 3 segundos entre cada llamada a la API, lo que hace que nuestra tasa de llamadas sea de 20 llamadas por minuto.

Aquí está el código para el mismo:

Nota: puede modificar esto para que encaje con reaccionar para establecer el estado y todo. Actualmente, esto se puede ejecutar directamente con el nodo.

 import axios from "axios"; const instance = axios.create({ baseURL: "https://api.coingecko.com/api/v3", }); const delay = async (ms = 3000) => { return new Promise((resolve) => setTimeout(resolve, ms)); }; let coinIds = []; const getIds = async () => { try { const response = await instance.get( "/coins/markets?vs_currency=usd&order=market_cap_desc&per_page=100&page=1&sparkline=false" ); coinIds = [...coinIds, ...response.data.map((coin) => coin.id)]; console.log("🚀 ~ file: apiCall.js ~ line 14 ~ getIds ~ coinIds", coinIds); } catch (e) { console.log("🚀 ~ file: apiCall.js ~ line 17 ~ getIds ~ e", e.message); } }; const getCoinsData = async (coin_id) => { console.log( "🚀 ~ file: apiCall.js ~ line 22 ~ getCoinsData ~ coin_id", coin_id ); try { const response = await instance.get(`/coins/${coin_id}`); return response.data; } catch (e) { console.log( "🚀 ~ file: apiCall.js ~ line 26 ~ getCoinsData ~ e", e.message ); } }; const fetchCoinData = async () => { try { await getIds(); coinIds = coinIds.slice(0, 4); // uncomment below to call API concurrently (if on paid version) // const fetchedCoinData = await Promise.all(coinIds.map((coinId) => getCoinsData(coinId))) // if on free version use this const fetchedCoinData = await coinIds.reduce( (acc, coinId) => acc.then(async () => { await delay(); const coinData = await getCoinsData(coinId); return coinData; }), Promise.resolve() ); console.log( "🚀 ~ file: apiCall.js ~ line 33 ~ fetchCoinData ~ fetchedCoinData", fetchedCoinData ); } catch (e) { console.log( "🚀 ~ file: apiCall.js ~ line 36 ~ fetchCoinData ~ e", e.message ); } }; fetchCoinData();
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda