我有meteor.js如何使onBeforeAction調用等待,直到內部函數調用完成meteor.js?
Router.onBeforeAction(function() {
var self;
self = this;
authToken = Session.get('authToken');
if (!authToken) {
this.redirect('login');
this.next();
} else {
Meteor.call('validateAuthToken', authToken, function (error, result)) {
if (result) {
self.next();
} else {
self.redirect('login');
self.next();
}
}
}
});
我需要通過調用服務器呼叫,以驗證存儲在會話認證令牌同步onBeforeAction方法。但是當我執行它時,這個方法總是拋出一個異常。我發現原因是因爲onBeforeAction調用在validateAuthToken調用返回之前終止。因此self.next()不會採取行動。所以我想知道我能做些什麼來阻止onBeforeAction調用停止,直到validateAuthToken返回驗證結果,然後繼續?
我已經嘗試通過等待一個會話變量不同的實現,但似乎就緒狀態永遠不會設置爲true
Router.onBeforeAction(function() {
var authToken;
authToken = Session.get('authToken');
if (!authToken) {
this.redirect('login');
this.next();
} else {
Meteor.call('validateAuthToken', authToken, function (error, result) {
if (!error) {
Session.set("tokenValidated", result);
}
});
this.wait(Meteor.subscribe('token', Session.get('tokenValidated')));
if (this.ready()) {
if (!Session.get("tokenValidated")) {
this.redirect('login');
this.next();
} else {
this.next();
}
}
}
});
我試過這個實現,但似乎由於某種原因我正在運行到一個無限循環 –
我可以看到,如果你在登錄頁面,這可能會遇到無限循環。我在'Router.onBeforeAction'上添加了一個'except'。 – Curtis
儘管如此,它仍然是一個無限循環,來自任何路線 –