这是我的路线:
this.route('friends', {
path: '/friends',
waitOn: function() {
return Meteor.subscribe('friendsPlaylists', Session.get('friends'))
}
});
在此路线之前,我调用一个命中api的函数,并设置一个会话值:
Router.onBeforeAction(getFriends, {only: 'friends'})
var getFriends = function() {
Meteor.call('getFriendsData', function(err, result) {
Session.set('friends', result.data);
Session.set('friendsLoaded', true);
});
}
返回Meteor.subscribe时,由于异步行为,未设置会话。如何让订阅工作,等待会话设置的位置?提前感谢您提供任何帮助!
答案 0 :(得分:1)
FYI onBeforeAction有一个名为pause的参数,它是一个暂停路由执行的函数,所以你可以像这样重写你的代码:
Router.onBeforeAction(getFriends, {only: 'friends'})
var getFriends = function(pause) {
Meteor.call('getFriendsData', function(err, result) {
Session.set('friends', result.data);
Session.set('friendsLoaded', true);
});
if(!Session.get('friendsLoaded')){ pause(); }
else{
this.subscribe('friendsPlaylists', Session.get('friends')).wait();
}
}
请参阅:https://github.com/EventedMind/iron-router/blob/devel/DOCS.md#using-hooks