处理一个简单的(相对)RxJS演示/测试代码,该代码发出Twitter Api调用和MongoDB请求,并将它们压缩为单个可观察对象。
为了能够进行Twitter Api通话,您需要通过Oauth进行身份验证。我找到了node-oauth库到auth节点请求:
var oauth = new OAuth.OAuth(
'https://api.twitter.com/oauth/request_token',
'https://api.twitter.com/oauth/access_token',
'key',
'secret',
'1.0A',
null,
'HMAC-SHA1'
);
然后我用Oauth get
方法创建一个新的Observable来从Twitter获取地点:
var twitterStream = Rx.Observable.fromNodeCallback(oauth.get)('https://api.twitter.com/1.1/trends/place.json?id=23424977',
'access-token',
'token');
来自MongoDB的另一个流:
Rx.Node.fromStream(Order.find().stream());
拉链的最后一步:
var getNewList = Rx.Observable
.zip(flickrStream, orderStream, function(user, order) {
return {user: user, order: order};
});
getNewList.subscribe(function(response) {
// render `response`
console.log(response);
});
尽管我通过Node执行代码时似乎没问题,但下面的消息会打印到控制台:
TypeError: Object #<Object> has no method '_performSecureRequest'
at exports.OAuth.get (/.../node_modules/oauth/lib/oauth.js:487:15)
at /.../node_modules/rx/dist/rx.all.js:5504:14
我可能已经完成了某事。使用Twitter请求创建新的Observable时出错。另外;我在没有RxJS和MongoDB查询的情况下进行Twitter调用时单独测试了代码,这些代码正常运行。将fromNodeCallback
更改为fromCallback
也没有任何区别。
答案 0 :(得分:2)
提供context
参数(请参阅documentation)或绑定get
的上下文:
Rx.Observable.fromNodeCallback(oauth.get.bind(oauth))
或
Rx.Observable.fromNodeCallback(oauth.get, oauth)