运行Meteor方法,在自己的光纤中插入mongo文档

时间:2012-12-20 07:47:37

标签: meteor

我正在尝试运行ntwitter流媒体API来跟踪有关某个主题标签的推文,并使用每条推文填充Mongo集合Tweets

我已经把服务器端连接起来了:

t = new nTwitter({
    consumer_key: credentials.consumer_key,
    consumer_secret: credentials.consumer_secret,
    access_token_key: credentials.access_token_key,
    access_token_secret: credentials.access_token_secret
});

Meteor.methods({
  trackTweets: function () {
    this.unblock; // this doesn't seem to work
    console.log('... ... trackTweets');
    var _this = this;
    t.stream(
        'statuses/filter',
        { track: ['#love'] },
        function(stream) {
            stream.on('data', function(tweet) {
              // app/packages/mongo-livedata/collection.js:247
              //         throw e;
              //               ^
              // O yes I love her like money
              // Error: Meteor code must always run within a Fiber
                console.log(tweet.text);
                Tweets.insert(tweet.text); // this call blocks
            });
            stream.on('error', function(error, code) {
                console.log("My error: " + error + ": " + code);
            });
        }
    );
  }
});

Tweets.insert(tweet.text)抛出must run inside its own Fiber error - 我尝试将this.unblock语句放在几个不同的地方。

我该怎么办?

2 个答案:

答案 0 :(得分:1)

你没有调用函数unblock,你需要替换你的

this.unblock;

用这个:

this.unblock();

如果这不起作用,我认为它与ntwitter获取数据的方式有关,你可以尝试添加这个

if (Meteor.isClient) return false;

这样该方法不会在客户端上运行,而只能在服务器上运行

答案 1 :(得分:0)

我认为您运行服务器端的代码需要包含在光纤中。 在这些答案中可以找到一些类似的例子:

Meteor code must always run within a Fiber” when calling Collection.insert on server

Stream stdout to Meteor website