在Node.js中提供一个Promise作为一个模块的导出asynchronous初始化的有效模式?

我需要编写一些加载数据的模块,然后为这些数据提供一个接口。 我想asynchronous加载数据。 我的应用程序已经使用承诺。 提供一个承诺,因为要求一个模块有效的模式/成语?

示例模块:

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;} }; }); 

用法示例:

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

更新:

我已经使用了一段时间了,而且效果很好。 我已经学到了一件事,而且在接受的答案中暗示的一点是,caching诺言本身,以及随时随地访问数据使用都是好事。 数据第一次被访问时,代码将等待,直到承诺解决。 接下来的使用将立即返回数据。 例如

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

这对于一个模块来说似乎是一个非常好的接口,它的工作是一次性获取一些数据。

数据是asynchronous获得的,所以承诺是有意义的。 目标是只取一次数据,然后让所有使用这个模块的地方都可以访问原始数据。 一个承诺也很好,因为它是一个单一的设备,记住它的状态。

就个人而言,我不确定为什么你需要getId()getName()方法,只要提供对属性的直接访问权限,但都可以工作。

这个接口的一个缺点是没有办法要求新的数据副本(从数据库新加载)。