Estoy raspando un poco después de recibir html de una API. Me gustaría hacer lo siguiente:
Para 1, tengo:
async function openHtml(htmlString) { const browser = await puppeteer.launch({headless: false}); const page = await browser.newPage(); await page.setContent(htmlString); return; // await browser.close(); }El código proporcionado con la API es:
var req = http.request(options, function (res) { var chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { var body = Buffer.concat(chunks); response = JSON.parse(body); //response.content = html, response.cookies = cookies const dom = new JSDOM(response.content); console.log(dom.window.document.querySelector("p").textContent); // "Hello world" openHtml(response.content); console.log('hi'); }); }); req.end();Si ejecuto el código en la línea de comando, el navegador se abre como se esperaba. Sin embargo, si configuro un punto de interrupción en:
console.log('hi');No es asi. ¿Cómo puedo hacer que esto funcione?
openHtml es una función asíncrona. Por lo tanto, deberá configurar el método que llama en espera (promesa) y la función principal también en asíncrono.
var req = http.request(options, function (res) { var chunks = [] res.on('data', function (chunk) { chunks.push(chunk) }) res.on('end', async function () { var body = Buffer.concat(chunks) response = JSON.parse(body) //response.content = html, response.cookies = cookies const dom = new JSDOM(response.content) console.log(dom.window.document.querySelector('p').textContent) // 'Hello world' await openHtml(response.content) console.log('hi') }) }) req.end()