对一个's的成功构建依赖于Nodejs中的http调用
Most idiomatic way to code an object who's successful construction depends on an http call in Nodejs
我是节点的新手,目前正在努力寻找最直观的方法来创建一个对象,该对象的构造取决于http查询的结果。在成功返回和解析查询之前,该对象是无用的,所以在没有初始化对象的情况下从构造函数返回感觉是错误的,但我所读到的关于节点的所有内容都表明我应该保持异步。
我可以像这样同步地写(请原谅伪代码)
function FooConfig(cfg_url) {
// use httpsync to get the response synchronously
var response = get(cfg_url);
if (response.is_good()) {
// parse response and set member data from response
this.bar = response.bar
} else {
// Raise an error
}
};
或异步
function FooConfig(cfg_url) {
// Use the regular http module and make the request asynchronously
var newCfg = this;
http.get(cfg_url, function(response) {
if (response.is_good()) {
newCfg.bar = respsonse.bar
} else {
// Raise an error
}
});
});
异步版本的问题是,如果请求没有完成,任何依赖FooCfg实例的客户端代码都可能失败。
即
var myCfg = new FooCfg('www.someurl.com/config')
// request is still pending
var myDependentObject = new DependsOnConfig(cfg); // Error, this neeeds myCfg.bar
这是一个可以同步的实例吗?在初始化节点应用程序时,这种情况应该只发生一次。
我会使用工厂来实现这一点。基本上,与其在构造函数中进行异步获取,不如在工厂方法中进行,并将获取的结果传递给构造函数。然后,通过回调返回新对象。
所以,你的构造函数可能看起来像这样:
function FooConfig(cfg_data) {
this.bar = cfg_data.bar
}
你的工厂方法看起来像:
var fooFactory(callback) {
http.get(cfg_url, function(response) {
if (response.is_good()) {
callback(null, new FooConfig(response)) // Here's the actual constructor call
} else {
callback(new Error("something bad happened"))
}
});
}
你可以这样称呼它:
fooFactory(function(err, myCfg) {
if (err) {
// handle error
} else {
var myDependentObject = new DependsOnConfig(myCfg);
}
});
我会将构造和初始化分为两个不同的部分,并让初始化方法返回一个promise,或者至少返回一个回调。when
初始化完成,then
使用它。
相关文章:
- 我应该如何从xml文件构建一个javascript页面
- 尽管链接成功并已成功下载,但未找到NPM模块
- 如何在DOM元素上按类型构建此函数
- Sencha Touch构建-排除文件
- RubyonRails——构建交互式接口应该朝哪个方向发展
- 在另一个函数成功结束后调用该函数
- 在ajax成功后,cluetip不适用于首次点击活动元素
- jQuery成功函数中的ajax成功函数
- 如何在构建node-webkit应用程序后获取外部资源
- Ext.js从json构建模型关系的问题
- jQuery触发器点击未从AJAX成功工作
- 如何使用jQuery可编辑插件检查ajax是否成功完成
- 如何为生产构建angular2应用程序
- Grunt构建导致Angular应用程序在dist上崩溃
- 执行ajax成功函数-jQUERY
- 解析云代码错误:解析.错误{代码:141,消息:“未调用成功/错误”}
- 构建Ajax调用数组时,JQueryAjax成功回调不起作用
- 如何在 jquery 成功方法中接收 JSON 并使用该 JSON 构建 HTML 内容
- 对一个's的成功构建依赖于Nodejs中的http调用
- 为什么当子模块构建失败时,NPM会成功