我在服务器 /functions.js文件中有以下内容:
Meteor.methods({
checkIfVoted: function (postId) {
if (postId) {
...
if (condition is met) {
return true;
} else {
return false;
}
}
}
});
然后客户端 /showPost.js中的以下内容:
Template.showPost.helpers({
alreadyVotedByUser: function () {
var answer = false;
if(this) {
Meteor.call("checkIfVoted", this._id, function(err, response) {
if (response) { console.log(response); }
answer = response;
});
}
console.log(answer);
return answer;
}
});
当我在使用console.log进行响应时,我在条件满足时得到值为true,但是answer变量不接受它,并且仍然显示为其值为false。
(我知道我将Meteor方法放在服务器目录中而不是在公共目录中,以便在客户端和服务器之间共享以提供延迟补偿)
如果有人可以帮助我,我们将非常感谢。
答案 0 :(得分:13)
在客户端上,Meteor.call
是异步的 - 它返回undefined
,其返回值只能通过回调访问。另一方面,助手同步执行。请参阅this question的答案,了解如何从助手调用方法。这是一个快速的解决方案:
$ meteor add simple:reactive-method
Template.showPost.helpers({
alreadyVotedByUser: function () {
return ReactiveMethod.call('checkIfVoted', this._id);
}
});
这个包的问题在于它可以鼓励不良行为,但对于不改变状态的方法调用应该没问题。
另请参阅this post中有关帮助者的部分。