0

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

我已经将它连接到服务器端,如下所示:

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语句放在几个不同的地方。

我应该在这里做什么?

4

2 回答 2

1

你不调用函数解锁,你需要更换你的

this.unblock;

有了这个:

this.unblock();

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

if (Meteor.isClient) return false;

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

于 2012-12-20T12:12:04.473 回答
0

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

在服务器上调用 Collection.insert 时,Meteor 代码必须始终在 Fiber 中运行

将标准输出流式传输到 Meteor 网站

于 2012-12-20T14:20:34.857 回答