如何在光纤中插入集合?

时间:2014-03-19 16:58:05

标签: meteor

我想在Tweets集合中插入来自使用Twit(npm模块)制作的流中的每个推文,在方法中。

这是我的代码:

stream: function(hashtag) {
    //Création du stream
    stream = T.stream('statuses/filter', { track: hashtag });
    var currentHashtag = hashtag;

    // Lance le stream
    stream.on('tweet', function (tweet) {
         var userName = tweet.user.screen_name;
            var userTweet = tweet.text;
            var tweetDate = tweet.created_at;
            var profileImg = tweet.user.profile_image_url;

        console.log(userName+" a tweeté: "+userTweet+" le: "+tweetDate);
        console.log("=======================");

        Tweets.insert({user: userName, tweet: userTweet, picture: profileImg, date: tweetDate, hashtag: currentHashtag}, function(error) {
            if(error)
                console.log(error);
        });
    });
}

这是我的错误消息: [错误:流星代码必须始终在光纤内运行。尝试使用Meteor.bindEnvironment包装传递给非Meteor Libraries的回调。 ]

我尝试了不同的解决方案,比如在Fiber()中包含Collection插入,我尝试使用Meteor.bindEnvironment,但从不了解如何正确使用它。

你能帮助我吗?

=============================================== ====

编辑:

我试过这个。使用此代码,我不再有任何错误,但推文不会插入我的收藏中。

    stream.on('tweet', Meteor.bindEnvironment(function(tweet) {
       var tweetToInsert = {
            user: tweet.user.screen_name, 
            tweet: tweet.text, 
            picture: tweet.user.profile_image_url, 
            date: tweet.created_at, 
            hashtag: currentHashtag
        };

        console.log(tweetToInsert.user+" a tweeté: "+tweetToInsert.tweet+" le: "+tweetToInsert.date+" \n "+tweetToInsert.picture+"\n"+tweetToInsert.hashtag);
        console.log("=======================");

        Tweets.insert(tweetToInsert, function(error, result) {
            if(error)
                console.log(error);
            else
                console.log(result);
        });
    }));

1 个答案:

答案 0 :(得分:5)

您可以在插入时运行光纤:

var Fiber = Npm.require('fibers');
Fiber(function () {
   Tweets.insert({user: userName, tweet: userTweet, picture: profileImg, date: tweetDate, hashtag: currentHashtag}, function(error) {
      if(error)
         console.log(error);
    });
}).run();