通过承诺

时间:2017-06-13 05:37:08

标签: angular meteor promise angular2-routing angular-meteor

我正在开发一个Angular2-Meteor应用程序,我从头开始创建这个应用程序。所以有两个面板,adminclient,所以我为它创建了authguard。但我认为我的代码不够好。 那么我的authguard如何运作:

canActivate = () => {
        if(Meteor.userId()) {
            if(!Meteor.user()) {
                var timeOutReturnValue = new Promise((resolve) => {
                    var MeteorUserFinder = Meteor.setInterval(() => {
                        if(Meteor.user()){
                            var admin = Roles.userIsInRole(Meteor.userId(), 'admin');
                            var employee = Roles.userIsInRole(Meteor.userId(), 'employee');
                            if(admin){
                                Meteor.clearTimeout(MeteorUserFinder);
                                resolve({status: Boolean(false), role: 'admin'});
                            }
                            else if(employee){
                                Meteor.clearTimeout(MeteorUserFinder);
                                resolve({status: Boolean(false), role: 'employee'});
                            }
                        }
                        return
                    }, 10);
                });
                return timeOutReturnValue.then((value) => {
                    if(value.role == 'admin'){
                        this.router.navigate(['/admin/dashboard']);
                    }
                    else if(value.role == 'employee') {
                        this.router.navigate(['/client']);
                    }
                    return Boolean(value.status);
                });
            }
            else if(Meteor.user()) {
                var admin = Roles.userIsInRole(Meteor.userId(), 'admin');
                var employee = Roles.userIsInRole(Meteor.userId(), 'employee');
                if(admin) {
                    this.router.navigate(['/admin/dashboard']);
                    return false;
                }
                else if(employee) {
                    this.router.navigate(['/client']);
                    return false;
                }
            }
        }
        else {
            this.router.navigate(['/signin']);
            return false;
        }
    };

所以在开始时我使用了canActivate函数函数,该函数返回布尔值true或false,它取决于此authguard创建的面板。 所以主要问题是Meteor.user迟到了,所以我必须使用PromisesetInterval。我需要你们帮助我。我怎样才能使它顺利进行,还有其他可能的方法吗?

  

注意:此authguard只是一个示例,它正在主应用中使用   路由用户必须去的地方。

0 个答案:

没有答案