Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

237
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda