MeteorJS wrapasync在铁路由器内部无法正常工作

时间:2016-02-04 11:41:23

标签: javascript node.js asynchronous meteor

我想检查用户是否已达到某个级别并根据该路由进行路由。但这并不等待wrapasync返回。怎么做到这一点?

Router.js

var getLevelAsync = function (userID, callback) {
    Meteor.call('getLevel', Meteor.userId(), function (err, data) {
        callback(null, data['level']);
    })
}

var getLevel = Meteor.wrapAsync(getLevelAsync);


Router.route('/verifyData', function(){
    var level = getLevel(Meteor.userId());
    if(level < 3) this.render('somepage');
    else this.render('another page');

})

服务器/ methods.js

getLevel: function (userID) {
        return Meteor.users.findOne({_id: userID});
    }

1 个答案:

答案 0 :(得分:0)

Meteor.wrapAsync围绕一个函数包装未来,这只能在服务器上完成。你不需要Meteor方法来实现你想要做的事情,你可以简单地渲染相同的页面,但根据当前用户呈现不同的上下文。

{{#with currentUser}}
  {{#if aboveLevelThree}}
    <h1>Congrats! You're in the special club!</h1>
  {{else}}
    <h3>Sorry mate, get a better score to advance</h3>
  {{/if}}
{{/with}}

模板助手的位置如下:

Template['someTemplate'].helpers({
  aboveLevelThree: function () {
    return this.level > 3;
  }
});