获取辅助函数内的流星方法返回值

时间:2015-02-21 00:13:06

标签: meteor

我在服务器 /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方法放在服务器目录中而不是在公共目录中,以便在客户端和服务器之间共享以提供延迟补偿)

如果有人可以帮助我,我们将非常感谢。

1 个答案:

答案 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中有关帮助者的部分。