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

101
Visualizações
Espere a que se complete la función de devolución de llamada en la solicitud HTTP antes de continuar con el ciclo for

Estoy tratando de ejecutar una solicitud HTTP 3 veces en node.js usando la biblioteca HTTPS incorporada, y cada ejecución tiene un conjunto diferente de opciones. Para pasar al siguiente conjunto de opciones después de completar una ejecución, estoy usando un bucle for que se incrementa una vez cada ejecución, para un total de 3 ejecuciones. Sin embargo, en lugar de esperar a que finalice cada ejecución antes de continuar en el bucle, se salta las dos primeras llamadas por completo y lo ejecuta 3 veces con el tercer conjunto de opciones. He buscado una respuesta por todas partes, ¿alguien tiene alguna idea/solución?

 for(let i = 0; i < 3; i++) { option = i; console.log("Calling with option " + i) await http.request(options[i], res => { let resp = ''; res.on('data', function(chunk) { resp += chunk; }); res.on('end', async function () { let data = await JSON.parse(resp); if(option === 0) { //Bloxlink handler console.log("Case 1: Bloxlink") if(data.status === "error") { returndata += "Bloxlink returned no users" } else { returndata += "\nBloxlink returned user with ID " + data.primaryAccount + " and username " + await noblox.getUsernameFromId(parseInt(data.primaryAccount)) + "." } } else if(option === 1) { //RoWifi handler console.log("Case 2: RoWifi") if(data.success === false) { returndata += "RoWifi returned no users" } else { returndata += "\nRoWifi returned user with ID " + data.roblox_id + " and username " + await noblox.getUsernameFromId(data.roblox_id) + "." } } else if(option === 2) { //Eryn handler console.log("Case 3: Eryn") if(data.status === "error") { returndata += "Eryn returned no users" } else { returndata += "\nEryn returned user with ID " + data.robloxId + " and username " + data.robloxUsername + "." } } console.log(returndata); }); res.on('error', function () { channel.send('One or more APIs returned an error. The operation has been terminated.') }); }).end(); channel.send("Run " + i + " finished: " + returndata); console.log(returndata); }
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Podrías envolverlo en una promesa y luego esperarlo:

 for(let i = 0; i < 3; i++) { option = i; console.log("Calling with option " + i) await new Promise((resolve, reject) => { http.request(options[i], res => { let resp = ''; res.on('data', function(chunk) { resp += chunk; }); res.on('end', async function () { let data = await JSON.parse(resp); if(option === 0) { //Bloxlink handler console.log("Case 1: Bloxlink") if(data.status === "error") { returndata += "Bloxlink returned no users" } else { returndata += "\nBloxlink returned user with ID " + data.primaryAccount + " and username " + await noblox.getUsernameFromId(parseInt(data.primaryAccount)) + "." } } else if(option === 1) { //RoWifi handler console.log("Case 2: RoWifi") if(data.success === false) { returndata += "RoWifi returned no users" } else { returndata += "\nRoWifi returned user with ID " + data.roblox_id + " and username " + await noblox.getUsernameFromId(data.roblox_id) + "." } } else if(option === 2) { //Eryn handler console.log("Case 3: Eryn") if(data.status === "error") { returndata += "Eryn returned no users" } else { returndata += "\nEryn returned user with ID " + data.robloxId + " and username " + data.robloxUsername + "." } } console.log(returndata); resolve(); }); res.on('error', function () { channel.send('One or more APIs returned an error. The operation has been terminated.') reject(); }); }).end(); }).then(() => { channel.send("Run " + i + " finished: " + returndata); console.log(returndata); }); }

Pero un enfoque más limpio sería usar una biblioteca de solicitudes basada en promesas como fetch o axios .

about 4 years ago · Juan Pablo Isaza 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