【发布时间】:2014-03-22 02:29:17
【问题描述】:
到目前为止,我已经能够从 Twitter 上下载流式实时数据。我如何使用这些数据?我正在尝试将其插入集合中,但出现此错误:
错误:Meteor 代码必须始终在 Fiber 中运行。尝试使用 Meteor.bindEnvironment 包装传递给非 Meteor 库的回调。
我尝试用纤维包裹我的代码,但它不起作用/或我没有包裹代码的正确部分。另外,我不确定这是否是在 Meteor 中使用流数据的正确方法。
Posts = new Meteor.Collection('posts');
if (Meteor.isClient) {
Meteor.call("tweets", function(error, results) {
console.log(results); //results.data should be a JSON object
});
}
if (Meteor.isServer) {
Meteor.methods({
tweets: function(){
Twit = new TwitMaker({
consumer_key: '...',
consumer_secret: '...',
access_token: '...',
access_token_secret: '...'
});
sanFrancisco = [ '-122.75', '36.8', '-121.75', '37.8' ];
stream = Twit.stream('statuses/filter', { locations: sanFrancisco });
stream.on('tweet', function (tweet) {
userName = tweet.user.screen_name;
userTweet = tweet.text;
console.log(userName + " says: " + userTweet);
Posts.insert({post: tweet})
})
}
})
}
【问题讨论】:
-
@SerkanDurusoy 这是一个很棒的视频,但是 Meteor._wrapAsync 在被调用时会创建一个 Future 对象(github.com/meteor/meteor/blob/master/packages/meteor/…),如果从 Meteor._wrapAsync 返回的函数被多次调用,那么就会有表示 Future 对象不能多次返回的错误。我见过的将 EventEmitter 事件转换为同步代码的唯一方法是使用这个库:github.com/alexbft/events-future,它巧妙地包装了
emitter.once以避免这个问题。
标签: javascript mongodb meteor streaming meteorite