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

102
Vistas
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 Respuestas
Responde la pregunta

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 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