"TypeError:这个_subscribe不是函数“;在简单节点模块中尝试RxJS时
"TypeError: this._subscribe is not a function" When trying RxJS in simple Node Module
我有以下节点代码
//index.js
var username = process.argv[2],
password = process.argv[3],
factories = require('./factories')(username, password);
factories.subscribe(function(data){
console.log(data.length);
});
factories.refresh();
//factories.js
var Rx = require('rx');
var factories = function(username, password){
var factories = [];
var source = Rx.Observable.from(factories);
var baseUrl = "<url>",
factoriesOpt = {
'uri': baseUrl+"<path>",
'method': 'GET',
'auth': {
'user': username,
'pass': password
}
},
response="",
request = require('request');
var refresh = function(){
request(factoriesOpt)
.on('data', function(chunk){
if(chunk)
response += chunk;
})
.on('end', function(){
factories = JSON.parse(response);
})
}
return {
subscribe : source.subscribe,
factories : factories,
refresh : refresh
};
};
module.exports = factories;
但当我运行这个时,我会得到错误。。。
TypeError: this._subscribe is not a function
at Object.Rx.Observable.observableProto.subscribe.observableProto.forEach [as subscribe] (/Users/<code location>/node_modules/rx/dist/rx.js:2034:19)
at Object.<anonymous> (/Users/<code location>/index.js:5:11)
at Module._compile (module.js:409:26)
at Object.Module._extensions..js (module.js:416:10)
at Module.load (module.js:343:32)
at Function.Module._load (module.js:300:12)
at Function.Module.runMain (module.js:441:10)
at startup (node.js:139:18)
at node.js:968:3
更新
如果我将工厂改为使用。。。
var subscribe = function(callback){
source.subscribe(callback);
};
...
return {
subscribe : subscribe,
factories : factories,
refresh : refresh
};
它有效,但我想避免包装。
这是一个绑定问题,也是javascript的要点之一。现在不详细介绍,但基本上应该做source.subscribe
而不是source.subscribe.bind(source)
。如果可行的话,请告诉我,我会详细说明约束性问题。
刚刚找到一个描述绑定错误的参考:http://developer.telerik.com/featured/seven-javascript-quirks-i-wish-id-known-about/#functions.看看#3。
相关文章:
- 节点Js:How to catch a“;没有这样的文件或目录“;读取线模块出错
- 如何从模块链中调用函数.导出到节点中
- 节点是否需要模块传递带有方括号的arg?这是个错误吗
- 节点模块依赖关系
- 如何引用HTML中节点模块中的js文件
- 未定义应为节点模块的对象
- 在节点 js 中使用护照本地模块验证(登录)密码时出错
- module.js在运行iron节点时找不到模块
- 如何在客户端javascript中需要节点模块
- 我应该总是将模块调用到var中,还是在节点中立即执行
- 如何在节点模块中从命令行运行函数
- 如何使用jasmine节点监视依赖模块内部的方法
- 将节点模块添加到gitignore
- 使用Q节点模块时,Bluemix node.js应用程序部署失败
- 使用document.cookie将客户端javascript转换为节点模块
- 查找与锁定和更新调度相关的一个或两个节点模块
- 节点模块的可能结构
- 节点模块对象范围:在所有函数之间共享一个对象
- 找不到强大的模块 - 节点.js
- 如何访问require模块节点上的父变量