发电机,承诺和合作或然后产量
generators, promises and co or then-yield
我正在编写一个 nodejs 程序,需要在初始化期间获取一些配置数据,以便我可以实例化一个单例。配置数据作为承诺返回,这意味着我必须即时初始化东西,而不是在需要的时候,这样我就可以 module.exports = () => return new blah(config)
。我不希望工厂 return 一个 thenable - 我希望它 return 一个构造函数的新实例。
我有一个获取配置数据的内部库,return这是一个承诺。我正在尝试使用 co
或 then-yield
或类似的库,以便我可以将它们视为同步的(我 认为 这就是这些库是为了,但也许我的理解有缺陷),主要是为了让我可以创建一个 return 实例的工厂,而不是 return 一个随实例解决的承诺
简化代码:
配置reader:
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
应该 return 具有正确配置参数的构造函数。但看起来 co 或 ty 什么也没做,我得到了 yield 结果。
我误会了什么?
What have i misunderstood?
async
函数的结果将只是一个 Promise。因此,您只能使用 then
处理程序访问 async
函数的结果值。
在你的情况下,
let factory = require('factory')()
factory.then((consObj) => // use the Constructor object)
我正在编写一个 nodejs 程序,需要在初始化期间获取一些配置数据,以便我可以实例化一个单例。配置数据作为承诺返回,这意味着我必须即时初始化东西,而不是在需要的时候,这样我就可以 module.exports = () => return new blah(config)
。我不希望工厂 return 一个 thenable - 我希望它 return 一个构造函数的新实例。
我有一个获取配置数据的内部库,return这是一个承诺。我正在尝试使用 co
或 then-yield
或类似的库,以便我可以将它们视为同步的(我 认为 这就是这些库是为了,但也许我的理解有缺陷),主要是为了让我可以创建一个 return 实例的工厂,而不是 return 一个随实例解决的承诺
简化代码:
配置reader:
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
应该 return 具有正确配置参数的构造函数。但看起来 co 或 ty 什么也没做,我得到了 yield 结果。
我误会了什么?
What have i misunderstood?
async
函数的结果将只是一个 Promise。因此,您只能使用 then
处理程序访问 async
函数的结果值。
在你的情况下,
let factory = require('factory')()
factory.then((consObj) => // use the Constructor object)