在Meteor上的setTimeout中运行函数和mongo查询

时间:2015-07-20 05:42:09

标签: node.js mongodb meteor

在服务器端,我试图通过一个回调函数更新Mongo集合上的字段,该函数作为参数传递给Meteor上的setTimeout。我们的想法是创建一个每N秒/分钟运行一次的函数来清理数据库;

它一直在说" Meteor编码必须始终在Fiber"

中运行

这就是我得到的

function MyClass(){ //foo }

MyClass.prototype.interval = function(time,callback){
    var interval = function(time,callback){
        this.timer = setTimeout(function(){
            callback();
            interval(time,callback);
        },time);
    };

    interval(time,callback);
}

if (Meteor.isServer) {
    Meteor.startup(function (){
        new MyClass().interval(1000,function(){
            //foo
            mycol.update({field:{$lt:one_hour_ago}},{$set:{boolean:false}});
        });
    });
}

它抛出"流星代码必须始终在光纤内运行。尝试使用Meteor.bindEnvironment包装传递给非Meteor库的回调。"

我读到一些人谈论将回调绑定到Fiber,但我的应用程序说光纤没有定义。

我该如何使这项工作?在我的情况下如何使用bindEnvironment?

1 个答案:

答案 0 :(得分:3)

您必须改为使用Meteor.setIntervalMeteor.setTimeout

请参阅:http://docs.meteor.com/#/full/timers