Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

158
Views
función de mapa vs paquete de titiritero de bucle en nodejs

He estado probando el paquete puppetter en nodejs, y cuando uso la función de datos funciona bastante diferente en contraste con for loop

esto es de lo que estoy hablando:

función de mapa

 data.map(async(info) =>{ let browser = await puppeteer.launch({ ignoreHTTPSErrors: true }); let page = await browser.newPage(); await page.goto(info.url, { waitUntil: "networkidle2" }) await page.screenshot({ path: info.src }) await browser.close(); }) console.log("map function completed");

esta es la entrada de la función map:

función de mapa completada

primera captura de pantalla guardada

segunda captura de pantalla guardada

For loop funciona así:

 let browser = await puppeteer.launch({ ignoreHTTPSErrors: true }); let page = await browser.newPage(); for (let i = 0; i<=data.length-1; i++) { console.log(data[i].url); await page.goto(data[i].url, { waitUntil: "networkidle2" }) await page.screenshot({ path: data[i].src }) } await browser.close(); console.log("for loop completed");

esta es la entrada del bucle for:

primera captura de pantalla guardada

segunda captura de pantalla guardada

bucle for completado

¿Por qué está pasando esto? Pensé que funcionaban de la misma manera. Me gustaría si alguien explica por qué es esto.

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

si desea que funcione de la misma manera, debe cambiar su primer código de esta manera

 const promises = data.map(async(info) =>{ let browser = await puppeteer.launch({ ignoreHTTPSErrors: true }); let page = await browser.newPage(); await page.goto(info.url, { waitUntil: "networkidle2" }) await page.screenshot({ path: info.src }) await browser.close(); }) await Promise.all(promises) console.log("map function completed");

cuando usa map y async , sus elementos se transforman en promesas y se ejecutarán en paralelo (en su caso, eso no es cierto porque está usando titiritero), por lo que debe await a que todos se resuelvan para registrar el mensaje de éxito.

Su segundo código es más síncrono porque es todo envoltorio en la misma función y cada await se ejecuta una tras otra.

about 4 years ago · Juan Pablo Isaza Report

0

En el primer caso, debido a que utiliza una función asíncrona dentro de la función de map , funciona la primera función sincrónica console.log() . Porque normalmente la operación asíncrona funciona después de la operación síncrona.

En el segundo caso, el for loop , la espera de nivel superior y la función console.log() funcionan de forma secuencial porque son sincrónicas.

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!