Estoy tratando de almacenar un objeto en la memoria en Node.js. Este objeto se crea a partir de un método asíncrono que es una llamada a una API. La cuestión es que solía ser un objeto síncrono que muchas partes de la aplicación están importando, pero ahora es asíncrono. Lo que estoy tratando de hacer es cargar este objeto en la memoria cuando inicializo la aplicación para que los archivos que están importando el objeto síncrono no necesiten ser refactorizados.
Ejemplo:
// Settings.js class Settings { async build() { setTimeout(() => { return { app: 'settings' } }, 1000) } } //index.js - store object in memory when application is initialized const intializeApp = async () => await new Settings().build() //randomFile.js import Settings from 'settings.js' //importing object {app: 'settings'}¿Cómo lograría esto?
Debe almacenar la configuración y exponer una forma de acceder a ella. Dado que está utilizando clases, puede proporcionar un método de obtención:
// Settings.js class Settings { async build() { return new Promise(resolve => { setTimeout(() => { this.settings = { app: 'settings' }; resolve(); // so the async function can tell when the timeout is done }, 1000); } } get() { return this.settings; } } // Need to create one instance so it's shared between all the files that it's imported export default new Settings(); //index.js - store object in memory when application is initialized const intializeApp = async () => await Settings().build() //randomFile.js import Settings from 'settings.js' const settings = Settings.get(); console.log(settings); // logs object {app: 'settings'} Y si está de acuerdo con get sea asíncrono, podría hacer que se inicialice perezosamente si aún no hay configuraciones:
async get() { if (!this.settings) await this.build(); return this.settings; }