Estoy aprendiendo a usar Titiritero y el caso es que cuando trato de mapear mi objeto de matriz de datos no puedo hacerlo usando la función de mapa. ¿Hay alguna forma de mapearlo con async/await o hay otra forma?
const puppeteer = require("puppeteer"); module.exports.screenshot = async (req, res) => { let data = [ { url: "someurl1", src: "someplace1" }, { url: "someurl2", src: "someplace1" } ]; let browser = await puppeteer.launch(); let page = await browser.newPage(); try { let files = data.map(info => ( await page.goto(info.url) //here i can´t await await page.screenshot({ path: info.src }) //these two functions )); await browser.close(); res.send({ data: files }) } catch (error) { console.error(`An error has occurred ${error}`); } }
Tiene una función de devolución de llamada dentro de map()
que es un bloque separado de la función externa.
Para esperar dentro de usted, como mínimo, también debe hacer que la devolución de llamada sea asíncrona
const files = data.map(async (info) => ( await page.goto(info.url), await page.screenshot({ path: info.src }) ));
Si se supone que los archivos tienen la captura de pantalla (el resultado de la última espera dentro del map()
), creo que debe agregar una coma entre esperas. Lo agregué arriba.
Una sintaxis más explícita podría ser
const files = data.map(async (info) => { await page.goto(info.url); return await page.screenshot({ path: info.src }) });