【发布时间】:2016-06-17 05:32:30
【问题描述】:
我正在做一个 Meteor 项目,想在客户端的模板助手中获取 Meteor.call 的返回值。一开始,我只是在回调函数中设置一个变量,然后在Meteor.call 之外获取变量的值。我发现Meteor.call 之后的代码根本不执行。然后我搜索了一下并使用了Session,它可以工作。但我真的不明白其中的原因。这是我的原始代码和修改后的代码。谁能为我解释一下?谢谢!!
原错误代码: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转换为同步调用即可。
标签: javascript asynchronous meteor