Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

129
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda