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

201
Vistas
NodeJS: cómo retrasar la resolución de un módulo debido a las dependencias de ese módulo

Supongamos el siguiente escenario:

Tenemos una clase que maneja una conexión Mongoose como se muestra a continuación:

 export interface IInstance { name: string; instance: Mongoose.Mongoose; } export default class MongoHandler { public static instances: IInstance[] = [{ name: 'default', instance: null, }]; // Connect to mongo instance and add it to the instances array public static async connect(name: string, uri: string, options?: object): Promise<void> { const instance: Mongoose.Mongoose = await Mongoose.connect(uri, options); const newInstance: IInstance = { name, instance, }; MongoHandler.instances.push(newInstance); } // Returns the instance based on the name of instance public static getInstance(name: string = 'default'): Mongoose.Mongoose { return this.instances.find(instance => instance.name === name).instance; } }

El otro módulo llamado CarModel usa el método getInstance() para crear un modelo:

 export interface ICar { name: string; } const carSchema = new Mongoose.Schema<ICar>( { name: { type: String, required: true, }, } ); const carModel = MongoHandler.getInstance('default').model<ICar>('Car', carSchema, 'Cars'); export default carModel;

Estamos usando carModel en un módulo llamado CarController .

En index.ts llamamos a estos dos módulos de la siguiente manera:

 import const app = new App( [ MongoHandler.connect('default', process.env.MONGO_URI), ], [ new CarController(), ] );

La aplicación es una clase para manejar el arranque rápido (se puede ignorar).

Al ejecutar este código, MongoHandler.getInstance('default') no está definido debido al orden de resolución de dependencia (creo). Y la resolución MongoHandler.getInstance('default') es seguida por MongoHandler.connect() que debe revertirse.

¿Como puedo resolver esto?

Saludos

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

0

Creo que hay 2 problemas en juego aquí, ninguno de los cuales tiene que ver con la resolución del módulo (que funcionará bien ya que no tiene dependencias circulares).

  1. array.prototype.find devuelve la PRIMERA coincidencia encontrada, crea una instancia de la matriz de instancias con un objeto que coincide con el nombre predeterminado, pero no tiene ninguna instancia. Cuando se conecta, agrega otro objeto con el nombre predeterminado, pero este será el segundo en la lista, por lo tanto, find devolverá el objeto original, que tiene su objeto de instancia establecido como nulo. Aconsejaría eliminar este objeto de instancia vacío predeterminado por error y claridad del código.

  2. su función de conexión hace uso de async-await. Pero nunca espera su función de conexión, por lo que no garantiza que su nueva instancia de conexión se haya realizado antes de llamar a getInstance dentro de su carController. Debe capturar la Promesa devuelta por la función de conexión y esperarla. Si no desea retrasar la instanciación de su CarController, puede guardar esta Promesa en MongoHandler y devolverla con alguna función de inicio que llame dentro de CarController para asegurarse de que la conexión se haya resuelto.

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