我需要编写一些模块,一次加载数据,然后提供该数据的接口。我想异步加载数据。我的应用程序已经使用了Promise。是否由于需要模块而提供有效的模式/习惯?
示例模块:
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 });
更新:
我已经使用了一段时间了,效果很好。我已经了解到的一件事(在已接受的答案中得到了暗示)是,缓存承诺本身以及在每次访问数据使用时都很好then。第一次访问数据时,代码将等待直到承诺被解决。的后续使用then将立即返回数据。例如
then
var cachedPromise = require('./myPromiseModule'); cachedPromise.then(function(dataInterface){ // Use the data }); ... cachedPromise.then(function(dataInterface){ // Use the data again somewhere else. });
对于一个模块来说,这似乎是一个完美的界面,该模块的任务是一次性读取某些数据。
数据是异步获取的,因此对此应有承诺。目标是只获取一次数据,然后让该模块使用的所有位置都可以访问该原始数据。一个诺言也很有效,因为它是一个记住其状态的一次性装置。
就我个人而言,我不确定为什么只可以直接访问属性时为什么需要getId()and getName()方法,但是两者都可以使用。
getId()
getName()
该接口的缺点是无法请求数据的新副本(从数据库中新加载)。