Estoy tratando de hacer una solicitud GET en node.js. Me gustaría acceder al resultado de la solicitud pero hay un problema. Aquí está el código:
const https = require('https'); var data; https.get('https://www.example.com', (resp) => { resp.on('data', (chunk) => { data += chunk; }); resp.on('end', () => { console.log("Inside : "+data+"\n"); }); }).on("error", (err) => { console.log("Error: " + err.message); }); console.log("Outside : "+data+"\n");El mensaje exterior aparece antes que el interior, y solo este último muestra la solicitud. Eso se debe al proceso asincrónico, supongo. Pero si quiero usar mi solicitud fuera, es un problema debido a este retraso. ¿Cómo puedo hacer?
Su código ejecuta asyncronymos. http.get(...) se ejecuta, pero el programa no espera el resultado de su obtención. Entonces, cuando haces "console.log("Outside: "+data+"\n");" - sus datos están vacíos. Nunca obtendrá datos en un mensaje externo, sin construcciones js como async/await.
Esto es lo que necesitas:
(async function () { const https = require('https'); var data; await new Promise((resolve, reject) => {https.get('https://www.example.com', (resp) => { resp.on('data', (chunk) => { data += chunk; }); resp.on('end', () => { console.log("\n\n===>Inside : "+data+"\n"); resolve(); }); }).on("error", (err) => { console.log("Error: " + err.message); reject(); }); }); console.log("\n\n===>Outside : "+data+"\n"); })();Gracias por responder. Después de buscar, hice esto, que funciona, pero no sé si es la mejor manera de hacerlo.
const https = require('https'); var data; (async function () { var p = new Promise((resolve) => {https.get('https://www.example.com', (resp) => { resp.on('data', (chunk) => { data += chunk; }); resp.on('end', () => { console.log("\n\n===>Inside : "+data+"\n"); resolve(); }); }).on("error", (err) => { console.log("Error: " + err.message); }); }); await p; console.log("\n\n===>Outside : "+data+"\n"); })();