【问题标题】:Meteor.call and latency compensationMeteor.call 和延迟补偿
【发布时间】:2015-08-10 05:08:13
【问题描述】:

我试图了解为什么在调用流星服务器方法时出现错误。它在服务器端工作,但在浏览器中抛出错误。

这是我在 /server/methods.js 文件中的服务器代码:

Meteor.methods({
    getTicketSettings: function(){
        var getTicketConfig = function(callback){
            Assets.getText('ticketCustomizing.json', function(error, res){
                if (error)
                    throw new Meteor.Error({error:'ticket-getCustomizing', reason:'No se pudo recuperar la configuración.'});
                else callback && callback(null, JSON.parse(res));
            });
        }

        var syncAssetRetrieve = Meteor.wrapAsync(getTicketConfig);
        var result = syncAssetRetrieve();
        return result;
    },
});

这是在 /lib/initialization.js 文件中的客户端/服务器代码中:

App.config.tickets.tipos = new Mongo.Collection('tipos');

Meteor.startup(function(){
    moment.locale('es');

     var ticketSettingsObj = Meteor.call('getTicketSettings');
     console.log(ticketSettingsObj);

     _.map(ticketSettingsObj.tipos, function(tipo){
         App.config.tickets.tipos.insert(tipo);
     });
});

当我运行我的应用程序时,我在控制台中记录了 JSON 对象,但浏览器显示此错误:Uncaught TypeError: Cannot read property 'tipos' of undefined in my /lib /initialization.js在这里:

_.map(ticketSettingsObj.tipos, function(tipo){
         App.config.tickets.tipos.insert(tipo);
     });

显然我误解了一些东西,但仍然想知道......

【问题讨论】:

    标签: meteor


    【解决方案1】:

    您需要将回调传递给 Meteor.call。服务器可以同步运行它,阻塞直到它得到返回,但客户端不能,所以ticketSettingsObj 将永远是未定义的。

    Meteor docs

    没有错误处理(并且未经测试):

    Meteor.call('getTicketSettings', function(error, result){
      console.log(result);
      _.map(result.tipos, function(tipo){
         App.config.tickets.tipos.insert(tipo);
     });
    });
    

    【讨论】:

    • 感谢您指出这一点,我没有仔细阅读此内容:“在客户端,如果您不传递回调并且您不在存根中,则调用将返回未定义,并且你将无法获得方法的返回值。那是因为客户端没有纤程,所以实际上没有任何方法可以阻止远程执行方法。”
    【解决方案2】:

    执行console.log(App.config.tickets) 并查看它是否返回有效对象。如果没有,那么您只在服务器端定义了对象App.config.tickets。如果这是故意的,并且您只希望在服务器端可以访问它,那么添加if(Meteor.isServer) 或将其定义移动到/server 目录内的文件中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-03
      相关资源
      最近更新 更多