在 Node.js 中提供 Promise 作为模块的导出是异步初始化的有效模式吗?

Is providing a Promise as a module's export a valid pattern for asynch initialization in Node.js?

我需要编写一些一次性加载数据的模块,然后提供该数据的接口。我想异步加载数据。我的应用程序已经使用了承诺。提供一个承诺作为要求模块有效的结果 pattern/idiom?

示例模块:

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 的后续使用将立即 return 数据。例如

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

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

数据是异步获取的,因此 promise 对此很有意义。目标是只获取一次数据,然后让所有使用该模块的地方都可以访问原始数据。 promise 对此也很有效,因为它是一种一次性设备,可以记住其状态。

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

此接口的缺点是无法请求数据的新副本(新从数据库加载)。