Meteor.call 和延迟补偿

标签 meteor

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

这是我在 /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.call。服务器可以同步运行它,阻塞直到获得返回,但客户端不能,因此ticketSettingsObj将始终是未定义的。

参见Meteor docs

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

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

关于Meteor.call 和延迟补偿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30493899/

相关文章:

javascript - Meteor-Simple-Schema 中 Date.now() 的架构字段类型

meteor - 如何在 meteor 中订阅多个出版物而无需相互等待且不使用解锁包?

javascript - meteor :输入一些输入值后重新计算辅助值

javascript - Uncaught ReferenceError : Component not defined in Meteor

javascript - 为什么 fs.readFileSync 在服务端的 promise 中不返回任何内容?

javascript - 如何手动销毁ReactiveDict?

node.js - 如何在 OpenShift Gear 中升级 Node.js

angularjs - 有没有事件表明上传的文件是用CollectionFS写的?

database - Meteor - 如何将 html 元素链接到点击事件的数据库条目?

javascript - 如何返回 mongoDB 中具有连字符字段的映射函数