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

178
Views
Usando datos de retorno de una función asíncrona, en otra función

Estoy haciendo un pequeño análisis de datos de los datos de chess.com

tengo este codigo

 const getUsernames = async function() { let response = await chessAPI.getCountryPlayers('RE') names = [...response.body.players] //console.log(names) return names } const grabPlayerScores = async function() { let players = getUsernames() // let playerStats = []; for (i = 0; i = players.length; i++) { let data = await chessAPI.getPlayerStats(i) console.log(data) } } grabPlayerScores();

No puedo hacer que la otra función espere el regreso de la primera. Sé que debería usar promesas o estructurar mi otra función de manera diferente, pero todavía me estoy acostumbrando a este tipo de funciones.

about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

Como práctica recomendada, debe asegurarse de que todas sus funciones devuelvan un valor. Use const para las variables que no cambiarán y let para las variables que absolutamente cambiará. Tenga cuidado con name = ... donde no escribió const o let , ya que esto convierte names en un global -

 const getUsernames = async function() { const response = await chessAPI.getCountryPlayers('RE') return response.body.players // <- probably no need to copy }
 const grabPlayerScores = async function() { const players = await getUsernames() return Promise.all(players.map(p => chessAPI.getPlayerStats(p))) }

Ahora grabPlayerScores será una promesa que contiene una matriz de todos los puntajes de los jugadores:

 grabPlayerScores().then(console.log).catch(console.error)
 [ ..., ... ,... ]

¿Quizás desee que los datos del jugador se combinen con los datos de la puntuación en el resultado final?

 const grabPlayerScores = async function() { const players = await getUsernames() return Promise.all(players.map(async p => ({ player: p, scores: await chessAPI.getPlayerStats(p) }))) }
 grabPlayerScores().then(console.log).catch(console.error)
 [ { player: "alice", scores: ... }, { player: "brenda", scores: ... }, { player: "catherine", scores: ... } ]

Otra buena práctica es hacer que sus funciones tomen parámetros. Esto los hace más reutilizables en otras áreas de su programa -

 const getUsernames = async function(countryCode) { const response = await chessAPI.getCountryPlayers(countryCode) return response.body.players } const grabPlayerScores = async function(countryCode) { const players = await getUsernames(countryCode) return Promise.all(players.map(async p => ({ player: p, scores: await chessAPI.getPlayerStats(p) }))) }

Ahora pasa "RE" como argumento a su función, lo que le permite reutilizar fácilmente esta función para otros países:

 grabPlayerScores("RE").then(console.log).catch(console.error)
about 4 years ago · Juan Pablo Isaza Report

0

Debe agregar otra await en su función grabPlayerScores para esperar a que finalice getUsernames .

 const grabPlayerScores = async function() { // Add an 'await' here let players = await getUsernames(); for(let i = 0; i = players.length; i++) { let data = await chessAPI.getPlayerStats(i) console.log(data) } }
about 4 years ago · Juan Pablo Isaza Report

0

Cambié un poco en tu código,

 const grabPlayerScores = async function () { let players = await getUsernames(); for (i = 0; i = players.length; i++) { let data = await chessAPI.getPlayerStats(players[i]); console.log(data) } }
about 4 years ago · Juan Pablo Isaza 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!