Я работаю над проектом Meteor и хочу получить возвращаемое значение Meteor.call в помощниках шаблонов на стороне клиента. Во-первых, я просто устанавливаю переменную в функции обратного вызова и получаю значение переменной за пределами Meteor.call
. Я узнал код после того, как Meteor.call
не выполняется вообще. Затем я немного искал и использовал Session, он работает. Но я не совсем понимаю причину. Вот мой оригинальный код и измененный код. Может ли кто-нибудь объяснить мне немного? Благодаря!!Как понять асинхронный Meteor.call на стороне клиента
Оригинал неправильный код: HTML
<div id="text-result-main">
<h2>{{title}}</h2>
</div>
JS
Template.texts.helpers({
title: function(){
var index = Router.current().params.index;
Meteor.call('getTitle', index,function(error, result){
titles = result;
});
console.log(titles);
return titles;
}});
Коллекция text.js
Text = new Mongo.Collection("text");
Meteor.methods({
'getTitle': function(myindex){
return Text.findOne({index: myindex}).title;
}});
Рабочий код: JS
Template.texts.helpers({
title: function(){
var index = Router.current().params.index;
Meteor.call('getTitle', index,function(error, result){
Session.set("titles",result);
});
console.log(Session.get("titles"));
return Session.get("titles");
}});
Обратите внимание, что я вообще не публиковал коллекцию текста клиенту, потому что он такой огромный. Каждый раз, когда я обновляю страницу при запуске неправильного кода, я не вижу содержимого «title» или не вижу его на консоли. Но когда я устанавливаю сеанс, он работает. Я действительно не понимаю, как это работает. Благодаря
Если у вас возникли проблемы с асинхронным вызовом (который вы, я могу сказать) просто конвертировать 'Meteor.call' в synchrnous один. – Quirk