【问题标题】:Synchronous answer from Q promise [duplicate]Q promise的同步回答[重复]
【发布时间】: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


【解决方案1】:

好的,所以在@slebetman 发表评论后,我在这里找到了答案: Node.js gives unpredictable ajax response on the first time of startup

我的问题基本上是上述问题的重复。

【讨论】:

    猜你喜欢
    • 2017-01-09
    • 1970-01-01
    • 2015-12-31
    • 2019-02-06
    • 2021-05-28
    • 2013-06-05
    • 2018-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多