Meteor.call和延迟补偿
我试图理解为什么调用meteor服务器方法时会出现错误。它在服务器端工作,但在浏览器中抛出错误 这是我在/server/methods.js文件中的服务器代码:Meteor.call和延迟补偿,meteor,Meteor,我试图理解为什么调用meteor服务器方法时会出现错误。它在服务器端工作,但在浏览器中抛出错误 这是我在/server/methods.js文件中的服务器代码: Meteor.methods({ getTicketSettings: function(){ var getTicketConfig = function(callback){ Assets.getText('ticketCustomizing.json', function(error
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;
},
});
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);
});
});
这是我在/lib/initialization.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;
},
});
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:无法读取my/lib/initialization.js中未定义的属性“tipos”:
_.map(ticketSettingsObj.tipos, function(tipo){
App.config.tickets.tipos.insert(tipo);
});
显然,我误解了某些内容,但仍然想知道……执行
console.log(App.config.tickets)
并查看它是否返回有效的对象。如果没有,那么您只在服务器端定义了对象App.config.tickets
。如果这是有意的,并且您只想在服务器端访问它,那么请添加一个If(Meteor.isServer)
或将定义移动到/server
目录中的文件中 您需要将回调传递给Meteor.call。服务器可以同步运行它,阻塞直到它得到返回,但是客户端不能,因此ticketSettingsObj将始终是未定义的
看
无错误处理(且未经测试):
谢谢你指出这一点,我读得不够仔细:在客户机上,如果您不传递回调,并且您不在存根中,则调用将返回未定义的,并且您将无法获取方法的返回值。这是因为客户端没有光纤,因此实际上没有任何方法可以阻止方法的远程执行。”