Meteor.Call奇怪的行为

时间:2015-08-28 16:02:26

标签: javascript node.js meteor

我在服务器上运行以下代码:

服务器/ tickets.js

if (Meteor.isServer) {

    ticketsCollection = new Mongo.Collection('tickets');

    var tickets = ticketsCollection.find({}).observe({
        added: function(tkt) {
            Meteor.call('allocateTicket', tkt);
        }
    });
}

服务器/ ticket_allocation.js

Meteor.methods({
    allocateTicket: function(ticket){
         console.log(ticket);
    }
});

首先,当服务器启动时,我收到错误:

  

排队任务中的​​异常:错误:找不到方法[404]

然而,随后的电话会很好。不知道为什么它在启动服务器时无法识别Meteor Call功能。

是否存在与订阅中使用的this.ready()类似的方法。

1 个答案:

答案 0 :(得分:1)

确保在实际定义方法之前不尝试执行call。如果您不想担心在项目中加载文件的顺序(http://docs.meteor.com/#/full/structuringyourapp;文件加载顺序),那么最安全的做法是在Meteor.startup块内进行调用,实例:

ticketsCollection = new Mongo.Collection('tickets');

if (Meteor.isServer) {
  Meteor.startup(function() {
    var tickets = ticketsCollection.find({}).observe({
        added: function(tkt) {
            Meteor.call('allocateTicket', tkt);
        }
    });
  });
}

然后,您在定义方法的文件中无关紧要。