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

132
Views
La función principal de NodeJS Async no sale

Trabajando en un pequeño proyecto de NodeJS actualmente que involucra la biblioteca Puppeteer. El problema que tengo es que la función main() en index.js parece no salir nunca. Todo el código funciona bien, pero en el código VS parece que el programa aún se está ejecutando.

Algunos ejemplos de código a continuación:

 var UserAgent = require('user-agents'); const userAgent = new UserAgent(); const puppeteer = require('puppeteer-extra'); const StealthPlugin = require('puppeteer-extra-plugin-stealth'); puppeteer.use(StealthPlugin()); class TS { constructor() { let page; } async init() { const browser = await puppeteer.launch({ headless: false }); this.page = await browser.newPage(); await this.page.setUserAgent(userAgent.toString()); } } async function main(params) { console.log("Started main.."); const ts = new TS(); await ts.init(); console.log("Ending main.."); } main().catch(e => console.error(e));;

Si ejecuto el código anterior en un terminal de código VS, el resultado mostrará:

Comenzó main.. Finalizando main.. (línea en blanco)

El programa ahora permanecerá en este estado indefinidamente hasta que presione ctrl + C. Si elimino la esperada llamada ts.init(), entonces funciona como se esperaba y mi terminal muestra

Comenzó main.. Finalizando main.. PS C:\Users\username\Desktop\nodejs-projects\my-project>

¿Alguien puede explicar qué está pasando aquí?

De toda la investigación que he hecho, lo mejor que se me ocurre es algún problema con el bucle de eventos, aunque realmente no sé qué lo está causando.

Agregar un .then() a main() con algo como esto resuelve el problema

 .then(() => { setTimeout(() => { process.exit(0); }, 5000);; })

Esto prueba que la promesa se está resolviendo ya que se está llamando a setTimeout(). Sin embargo, si main se resuelve y no queda ningún código para ejecutar, estoy bastante perdido en cuanto a por qué el programa no finalizará automáticamente sin llamar a process.exit(). Realmente agradecería algo de ayuda.

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

0

Muy divertido. He estado buscando una solución todo el día y tan pronto como la publico en stackoverflow la encuentro.

Encontré este paquete que puede ayudar a señalar cosas como conexiones abiertas que evitan que el nodo salga: ¿por qué se está ejecutando el nodo?

A continuación, descubrí que la conexión del titiritero abierto al navegador Chrome abierto debe cerrarse con algo como esto:

 async close() { await this.browser.close(); }

En lugar de eliminar la pregunta, pensé en publicar esto en caso de que alguien más tenga el mismo dolor de cabeza en algún momento.

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!