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

226
Vistas
¿Cómo exportar una variable que tiene un valor asignado de forma sincronizada desde un módulo en javascript?

considera esto,

 let value = ""; value = DATABASE_CALL(); module.exports = value;

Cuando necesito el módulo anterior en otro módulo e intento acceder a la variable 'valor', es una cadena vacía. ¿Cómo puedo hacer que module.exports espere hasta que se complete la llamada DB anterior y se asigne un valor a la variable?

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

0

Asumo value = DATABASE_CALL(); es un sustituto del código asíncrono. (Si fuera realmente sincrónico como se muestra allí, simplemente lo usaría como el valor inicializador en value ).

Tiene algunas opciones para exportar un valor que solo está disponible de forma asíncrona:

  1. Usar ESM en lugar de CommonJS y usar await de nivel superior para evitar que el módulo termine de cargarse hasta que se complete la operación de la base de datos.

     export default await DATABASE_CALL();

    ... donde DATABASE_CALL devuelve una promesa. (Si aún no lo está, puede envolverlo ).

    El código que lo use no tendrá que await , pero el módulo no terminará de cargarse hasta que se complete la operación de la base de datos, y no se cargará en absoluto si la operación de la base de datos falla.

    Esto realmente solo es apropiado si el módulo no se puede usar en absoluto sin ese valor.

  2. Exportar una promesa del valor (ya sea que cambie a ESM o siga usando CommonJS):

     module.exports = DATABASE_CALL();

    ... donde (nuevamente) DATABASE_CALL devuelve una promesa.

    El código que lo use tendría que await la promesa (o usar .then / .then .catch ).

  3. Usando ESM en lugar de CommonJS y usando un valor de marca para indicar "todavía no está listo" ( null e undefined son útiles para eso) y actualizando el valor cuando se completa la llamada a la base de datos:

     export let value = null; // ...later when DATABASE_CALL is complete value = /*...the value from the DB...*/;

    Las exportaciones de ESM son enlaces en vivo , lo que significa que si el módulo de origen actualiza la variable, las importaciones en otros módulos ven el valor actualizado.

    Nota: Solo puede hacer esto con exportaciones con nombre ( value en el ejemplo), no con exportaciones predeterminadas.

    Por supuesto, eso significa que el código que lo usa debe permitir la posibilidad de que aún no esté cargado.

  4. Exportar una función que proporciona el valor y que se encarga de decirle a la persona que llama que el valor aún no está disponible (la implementación se deja al lector).

Probablemente hay otras opciones.

En los casos en que el módulo no tiene valor sin la información asíncrona, generalmente uso el #1. Si no, normalmente uso el #2.

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