发电机,承诺和合作或然后收益

时间:2016-02-25 02:03:03

标签: javascript node.js promise generator

我正在编写一个nodejs程序,需要在初始化时获取一些配置数据,这样我才能实例化一个单例。配置数据作为承诺返回,这意味着我必须在运行时初始化事物,而不是在需要时间,所以我可以module.exports = () => return new blah(config)。我不希望工厂返回一个工具 - 我希望它返回一个构造函数的新实例。

我有一个内部库,可以获取配置数据并返回一个promise。我尝试使用cothen-yield或类似的库,以便我可以将事物视为同步(我认为这就是这些库是for,但也许我的理解是有缺陷的),主要是因为我可以创建一个返回实例的工厂,并且不会返回一个通过实例解析的承诺

简化代码:

配置阅读器:

var read = function () {
  let c = projectConfig.load(); //returns a promise that resolves with config data
  return c;
});

module.exports = {read};

工厂:

let factory = ty.async(function * factory () {
  let cfg = yield configHelper.read();
  console.log('config', cfg)
  return new Constructor(cfg);
})

module.exports = () => factory()

指数:

let factory = require('factory')()
console.log(factory)

当我运行程序时,我得到以下输出

Promise {
    _d: {
        p: [Circular],
        c: [],
        a: undefined,
        s: 0,
        d: false,
        v: { cdn: [Object] },
        h: false,
        n: false
    }
} // this is from the main module

config { /* correct config object data here */ } //this is from factory

查看各种博客文章谈论这个,我希望通过使用then-yield或co,factory应该返回带有正确配置参数的构造函数。但看起来它没有做任何事情,而且我得到了收益结果。

我误解了什么?

1 个答案:

答案 0 :(得分:0)

  

我误解了什么?

async函数的结果仅为Promise。因此,您只能使用async处理程序访问then函数的结果值。

在你的情况下,

let factory = require('factory')()

factory.then((consObj) => // use the Constructor object)