w3schools promises pending nodejs node ejemplo await async javascript node.js promise node-modules

javascript - promises - ¿Proporcionar una Promesa como exportación de un módulo es un patrón válido para la inicialización asíncrona en Node.js?



promises javascript w3schools (1)

Necesito escribir algunos módulos que cargan datos una vez y luego proporcionar una interfaz para esos datos. Me gustaría cargar los datos de forma asíncrona. Mi aplicación ya usa promesas. ¿Es una promesa como resultado de requerir un módulo un patrón / idioma válido?

Módulo de ejemplo:

var DB = require(''promise-based-db-module''); module.exports = DB.fetch(''foo'') .then(function(foo){ return { getId: function(){return foo.id;}, getName: function(){return foo.name;} }; });

Ejemplo de uso:

require(''./myPromiseModule'') .then(function(dataInterface){ // Use the data });

ACTUALIZAR:

He usado esto por un tiempo y funciona muy bien. Una cosa que he aprendido, y se insinúa en la respuesta aceptada, es que es bueno guardar en caché la promesa en sí misma, y ​​cuando quiera acceder al uso de datos en then . La primera vez que se accede a los datos, el código esperará hasta que se resuelva la promesa. El uso posterior de then devolverá los datos inmediatamente. p.ej

var cachedPromise = require(''./myPromiseModule''); cachedPromise.then(function(dataInterface){ // Use the data }); ... cachedPromise.then(function(dataInterface){ // Use the data again somewhere else. });


Esto parece ser una interfaz perfectamente buena para un módulo cuyo trabajo es realizar una captura de datos de una sola vez.

Los datos se obtienen de forma asíncrona, por lo que una promesa tiene sentido para eso. El objetivo es obtener los datos solo una vez y luego dejar que todos los lugares donde se usa este módulo solo tengan acceso a esos datos originales. Una promesa funciona muy bien para eso también porque es un dispositivo de un solo disparo que recuerda su estado.

Personalmente, no estoy seguro de por qué necesita los getId() y getName() cuando podría ofrecer acceso directo a las propiedades, pero cualquiera puede funcionar.

Un inconveniente de esta interfaz es que no hay ningún medio para solicitar una copia nueva de los datos (recién cargados desde la base de datos).