在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()
方法,只要提供对属性的直接访问权限,但都可以工作。
这个接口的一个缺点是没有办法要求新的数据副本(从数据库新加载)。