Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

134
Views
Manera inteligente de agregar datos API asíncronos

Estoy recorriendo una lista de objetos que tienen cada uno un solo par clave-valor, address que es tipo string

Quiero crear un objeto con los resultados de las solicitudes de API para cada dirección que me diga con qué frecuencia aparece un símbolo de token. Sin embargo, creo que debido a que estoy ejecutando todas estas solicitudes en paralelo, es posible que esté sobrescribiendo el recuento de tokenKeyValue . ¿Existe una forma más inteligente de hacer esto, que conserve la paralelización para mantener las cosas rápidas?

 const tokenKeyValue: any = {}; let addressesCompleted = 0; await Promise.all(segmentData.users.map(async (user: {address: string}, i) => { try { const tokenBalances = await getBalancesForUser( user.address, ); if (tokenBalances && tokenBalances.length > 0) { for (const token of tokenBalances) { if (tokenKeyValue[token.symbol]) { tokenKeyValue[token.symbol]++; } else { tokenKeyValue[token.symbol] = 1; } } } } catch(e) { console.error(e); } finally { addressesCompleted++; // Check we are done looping if (addressesCompleted === segment.users.length) { // Calculate final tokenCount const tokenCount = []; for (const token in tokenKeyValue) { tokenCount.push({ symbol: token, value: tokenKeyValue[token], }); } } } }));
about 4 years ago · Santiago Gelvez
2 answers
Answer question

0

En lugar de usar

 addressesCompleted++; // Check we are done looping if (addressesCompleted === segment.users.length)

simplemente mueva ese código después de await Promise.all(…) :

 const tokenKeyValue: Record<string, number> = {}; await Promise.all(segmentData.users.map(async (user: {address: string}) => { try { const tokenBalances = await getBalancesForUser(user.address); for (const token of tokenBalances || []) { tokenKeyValue[token.symbol] ??= 0 tokenKeyValue[token.symbol] += 1; } } catch(e) { console.error(e); } })); // Calculate final tokenCount const tokenCount = Object.entries(tokenKeyValue).map(([symbol, value]) => ({symbol, value}));
about 4 years ago · Santiago Gelvez Report

0

Puede realizar todas las solicitudes en paralelo y luego usar Promise.all() para esperar hasta que se resuelvan todas las solicitudes y luego contar los símbolos.

 const users = [{ address: '12 main st' }, { address: '32 main st' }]; const promises = users.map(user => { return getBalancesForUser(user); }); Promise.all(promises).then((tokenBalancesList) => { const countByTokenSymbol: any = {}; for (let tokenBalances of tokenBalancesList) { for (let key in tokenBalances) { const tokenBalance = tokenBalances[key]; countByTokenSymbol[tokenBalance.symbol] = countByTokenSymbol[tokenBalance.symbol] || 0; countByTokenSymbol[tokenBalance.symbol]++; } } const tokenCount = []; for (let tokenSymbol in countByTokenSymbol) { tokenCount.push({ symbol: tokenSymbol, value: countByTokenSymbol[tokenSymbol] }); } console.log(tokenCount); }); //placeholder getBalancesForUser function async function getBalancesForUser(user: {address: string}) { return [{ symbol: user.address[0] }, { symbol: user.address[1] }]; }
about 4 years ago · Santiago Gelvez Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!