Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

204
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!