How to make onBeforeAction call wait until a function call inside finishes in meteor.js?(如何让 onBeforeAction 调用等到内部的函数调用在meteor.js中完成?)
问题描述
我有一个与 meteor.js 同步的 onBeforeAction 方法
I have a synchronized onBeforeAction method with 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();
}
}
}
});
我需要通过调用服务器调用来验证存储在 Session 中的身份验证令牌.但是这个方法在我执行的时候总是会抛出异常.我发现原因是因为 onBeforeAction 调用在 validateAuthToken 调用返回之前终止.因此 self.next() 不会采取行动.所以我想知道我该怎么做才能防止 onBeforeAction 调用停止,直到 validateAuthToken 返回验证结果然后继续?
I need to validate an authentication token stored in Session by invoking a server call. But this method always throws an exception when I am executing it. And I found out the reason is because the onBeforeAction call is terminated before the validateAuthToken call returns. And thus the self.next() won't take action. So I wonder what can I do to prevent the onBeforeAction call from stopping until the validateAuthToken returns the validated result and then proceed?
我通过等待会话变量尝试了不同的实现,但似乎就绪状态从未设置为 true
I've tried a different implementation by wait on a session variable, but it seems the ready state is never set to 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();
}
}
}
});
推荐答案
您也可以使用 https://github.com/iron-meteor/iron-router/issues/426
Ready = new Blaze.ReactiveVar(false);
Router.route('feed',{
waitOn: function () {
Meteor.call('getInstagramUserFeed', function(error, result) {
if(!error) Ready.set(result)
});
return [
function () { return Ready.get(); }
];
},
action: function () {
if (this.ready()) this.render('feed')
else this.render('LoadingMany');
}
});
这篇关于如何让 onBeforeAction 调用等到内部的函数调用在meteor.js中完成?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何让 onBeforeAction 调用等到内部的函数调用在meteor.js中完成?


基础教程推荐
- 如何使用 CSS 显示和隐藏 div? 2022-01-01
- Javascript 在多个元素上单击事件侦听器并获取目标 2022-01-01
- Node.js 有没有好的索引/搜索引擎? 2022-01-01
- 如何使用sencha Touch2在单页中显示列表和其他标签 2022-01-01
- 为什么我在 Vue.js 中得到 ERR_CONNECTION_TIMED_OUT? 2022-01-01
- WatchKit 支持 html 吗?有没有像 UIWebview 这样的控制器? 2022-01-01
- 每次设置弹出窗口的焦点 2022-01-01
- jQuery File Upload - 如何识别所有文件何时上传 2022-01-01
- 如何在特定日期之前获取消息? 2022-01-01
- 什么是不使用 jQuery 的经验技术原因? 2022-01-01