“TypeError:this._subscribe不是函数”在简单的Node模块中尝试RxJS时
我有以下节点代码
//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)
。 如果这有效,让我知道,我会更详细地讨论绑定问题。
刚刚find一个描述绑定错误的参考: http : //developer.telerik.com/featured/seven-javascript-quirks-i-wish-id-known-about/#functions 。 看看#3。