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

295
Vistas
La función Module.exports se ejecuta antes del registro de la consola, ¿por qué?

He leído algunas respuestas a preguntas similares, pero no he podido entender por qué mi aplicación se comporta de esta manera.

Estoy actualizando una aplicación CLI para que sea modular. El script principal importa una función llamada questionOne después de un archivo console.log:

 const questionOne = require('./modules/questionOne'); console.log('\n'); console.log('Which DB do you want to use?'.inverse); questionOne();

questionOne usa readline-sync para hacer una pregunta y ejecutar código dependiendo de la respuesta. Pero, cuando ejecuto mi aplicación... primero se hace la pregunta, y luego se ejecuta Which DB do you want to use después de que el usuario haya hecho la pregunta. ¿Por qué?

Para referencia

El código para questionOne:

 const colors = require('colors'); const readlineSync = require('readline-sync'); //Data Modules const { dbList } = require('../data/dbList.json'); const db = readlineSync.keyInSelect(dbList); //people = 0 || offers = 1 || networks = 2 const questionOne = () => { if (db === 0) { console.log('\n'); console.log('Which Collection would you like to use?'.inverse.bold); // const colRef = readlineSync.keyInSelect(); // dbPeople(colRef); } else if (db === 1) { console.log('You picked offers'); } else if (db === 2) { console.log('You picked networks'); } else { process.exit(); } }; module.exports = questionOne;

Entiendo que puedo poner el archivo console.log dentro del módulo. Pero tengo curiosidad por qué javascript se comporta de esta manera.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Cuando solicita por primera vez require('./modules/questionOne'); , que ejecuta todo el código en el nivel superior del módulo que está cargando. Y ejecuta ese código sincrónicamente, lo que significa que no regresa hasta que regresa el código de nivel superior.

Entonces, en su ejemplo, eso ejecutará todo el código en el nivel superior de su módulo questionOne . Ese código de nivel superior incluye esta línea:

 const db = readlineSync.keyInSelect(dbList);

Entonces, esa línea de código se ejecutará antes de que el módulo haya terminado de cargarse y antes de que regrese de esto:

 const questionOne = require('./modules/questionOne');

Entonces, eso debería explicar por qué lo primero que sucede es que recibe el aviso de const db = readlineSync.keyInSelect(dbList); . Si desea mostrar algo antes de eso, póngalo antes en el código.

Luego, después de cumplir esa promesa, las únicas otras cosas que suceden en su módulo questionOne son la definición de la función questionOne y el módulo de asignación module.exports = questionOne; . En ese momento, require('./modules/questionOne'); devuelve y el valor de module.exports se asigna a su variable questionOne en su módulo principal.

Luego, y solo entonces, el resto de su módulo principal se ejecuta y ejecuta:

 console.log('\n'); console.log('Which DB do you want to use?'.inverse); questionOne();

Entiendo que puedo poner el archivo console.log dentro del módulo. Pero tengo curiosidad por qué javascript se comporta de esta manera.

Solo está ejecutando el código en el orden encontrado. Nada aquí parece asíncrono, por lo que es simplemente ejecutar una línea de código tras otra a medida que se encuentran.

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