2016-02-04 2 views
0

Я хочу проверить, достиг ли пользователь определенного уровня и выполнить маршрутизацию в соответствии с этим. Но это не дожидается возврата wrapasync. Как достичь этого?MeteorJS 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}); 
    } 
+0

WrapAsync не работает на стороне клиента. Вы можете использовать обратный вызов, обещание или реактивное вычисление, но не псевдосинхронное поведение, предоставляемое 'wrapAsync'. – MasterAM

+0

Возможный дубликат [Как использовать Meteor.wrapAsync на клиенте?] (Http://stackoverflow.com/questions/29478707/how-to-use-meteor-wrapasync-on-the-client) – MasterAM

ответ

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; 
    } 
}); 
Смежные вопросы