流星法无尽地运行

时间:2015-04-24 19:49:38

标签: javascript node.js mongodb meteor

我在Meteor.methods定义中有这段代码:

update_field: function(collection,document_id,field,value) {
    obj = {};
    obj[field] = value;
    console.log(obj);
    if (collection == 'clients') {
        var Collection = Clients;   
    } else if(collection = 'sites') {
        var Collection = Sites;
    }
    Collection.update(
    {
        _id: document_id
    }, {
        $set: obj
    }, function(error,id) {
        console.log(error,id);
        return(error,id);
    }
    );
}

从多个客户端帮助程序事件调用此方法,并根据需要更新字段。但只要它运行一次,它就永远不会停止运行。有时即使所有Meteor.call('update_field')被注释掉,它也会无限运行。我尝试了一个'调用者'参数,并将其添加到所有可能的调用中,以找出为什么它一直被调用无效。任何想法为什么这是循环?

编辑:运行2,000 /分钟

Edit2:这是通过以下两种方式之一调用的:在适当字段中的键盘代码== 13(输入)或字段模糊。但是,当这些调用被注释掉时,问题仍然存在。

2 个答案:

答案 0 :(得分:1)

特别是你的第二条评论让我担心:

  

但是,即使这些电话被注释掉,问题仍然存在。

然后谁在呼唤它?您描述的行为指向执行该方法的某个帮助程序。该方法更改了一些数据,这些数据重新执行了帮助程序(反应性),最后我们得到了一个经典的无限循环。

检查整个源代码以获取对此方法的引用:

$ grep -r "update_field" *

也许您以某种方式设置变量然后使用变量来调用方法。另外:您是否在Meteor.methods({ ... })块内声明了该方法?

答案 1 :(得分:0)

我认为问题在于我的一种方法模糊了输入字段但是阻止了破坏。然后调用模糊处理程序并从那里引起循环。这是我的第一个Meteor项目,因此我将这个问题归结为不太了解系统。我仍然觉得奇怪的是,当呼叫者被注释掉时,这个方法被调用了,但我会在另一天看到那个。