Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

131
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda