【发布时间】:2015-12-22 19:58:32
【问题描述】:
我需要编写一些模块来一次加载数据,然后为该数据提供一个接口。我想异步加载数据。我的应用程序已经使用了 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
});
更新:
我已经用了一段时间了,效果很好。我学到的一件事,在接受的答案中有所暗示,那就是缓存 Promise 本身是很好的,每当你想访问数据时,请使用 then。第一次访问数据时,代码将等待直到 promise 被解析。后续使用then 将立即返回数据。例如
var cachedPromise = require('./myPromiseModule');
cachedPromise.then(function(dataInterface){
// Use the data
});
...
cachedPromise.then(function(dataInterface){
// Use the data again somewhere else.
});
【问题讨论】:
-
看起来对我来说效果很好。
-
是的,看起来非常好。如果您使用的是 ES6 模块,您甚至可以使用 Promise-aware 模块加载器,以及
import“同步”。 -
以下答案是否解决了您的问题?如果是这样,请通过选中该答案左侧的绿色复选标记将最佳答案标记为已接受答案,以向社区表明您的问题已得到解答,然后您和提供答案的人都将获得一些声誉积分这可以在 StackOverflow 上获得更多特权。
标签: javascript node.js promise node-modules