【发布时间】:2015-11-30 01:23:05
【问题描述】:
我正在用 node.js 编写一个应用程序。
应用程序的配置存在于数据库中。
我创建了一个通用模块,可以与数据库对话并在 Q Promise 中返回回复。
我现在正在创建一个特定的模块,该模块的存在是为了获取我的应用程序的配置。
这是下面的config 模块。 getconfig() 函数返回一个 Q 承诺。但我想同步得到回复。
在另一个模块中(参见下面的代码),我希望该模块获取配置,以便了解如何与服务(在本例中为 aws s3)通信。
所以在实例化该模块时我要做的第一件事就是获取配置。 而且我希望这样,每当实例化该模块时,它也会被配置。这需要同步完成。
var s3Module = (function () {
var _config = config.getConfig().s3;
var bucket = _config.bucket;
return {
pushToS3: function (payload, fulfilled) {
var params = buildParams(payload);
s3.putObject(params, function (err, data) {
if (err)
error(err);
else
fulfilled(data);
});
}
};
})();
但是使用 Promise 时,我看不到如何确保在开始调用模块的函数时从数据库返回配置
【问题讨论】:
-
这是不可能的。重新考虑您的架构 - 添加一个接受回调的
init()函数 - 类似于 jQuery 的$()在 dom 就绪时执行的方式。 -
getconfig() 函数返回一个 Q 承诺。但我想同步获得回复。 - Promise 不能使异步操作同步。
-
@slebetman 你能详细说明一下吗?
-
一个你“同步”的本质上的异步操作意味着阻塞你的代码,这会破坏性能
-
@SimonH 是的,我明白了,但是在没有配置的情况下实例化一个模块是没有意义的。因此,配置值得一提
标签: javascript node.js promise q