MeteorJS包装异步在铁路由器内不起作用

MeteorJS wrapasync not working inside iron router

本文关键字:路由器 不起作用 包装 异步 MeteorJS      更新时间:2023-09-26

我想检查用户是否达到了某个级别,并根据该级别进行路由。但这不会等待包装异步返回。如何实现这一点?

路由器.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');
})

服务器/方法.js

getLevel: function (userID) {
        return Meteor.users.findOne({_id: userID});
    }
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;
  }
});