angular – 否定守卫中的承诺结果

前端之家收集整理的这篇文章主要介绍了angular – 否定守卫中的承诺结果前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个工作的angular2 guard,带有一个canActivate(),它调用isLoggedIn()的服务并返回一个promise然后解析并且路由被适当地处理.

但是,我试图做相反的事情,看看用户何时没有登录,并且它无法正常工作.

我尝试了一些简单的事情(添加一个!运算符),希望它可以工作:

@Injectable()
export class AuthGuard implements CanActivate {
    constructor(private authService: AuthService) {}

    canActivate() {
        return !this.authService.isLoggedIn();
    }
}

但是,这总是返回一个假值,并且路径永远不会激活.

这是我的isLoggedIn()函数的相关摘录:

isLoggedIn(): Promise<Boolean> {
  var component = this;
  return new Promise((resolve,reject) => {       
      component.queryForUser((user) => {
        resolve(user != null);
      });
    }
  });
}

如果用户不等于null,则他登录并且promise以true结算.否则,错误.

虽然我可以简单地添加一个参数来指定我要查找的状态,或者甚至创建一个isNotLoggedIn()函数,但是具有相同的逻辑但反转,我问,有没有办法否定对于canActivate的promise的决心的价值()?

解决方法

return!this.authService.isLoggedIn()将无效,因为JS的工作方式. this.authService.isLoggedIn()是promise对象并且是真实的. !this.authService.isLoggedIn()将始终为false.

相反,promise结果应映射到否定结果

canActivate() {
    return this.authService.isLoggedIn().then(result => !result);
}

要么

async canActivate() {
    return !(await this.authService.isLoggedIn());
}

等待的括号……是可选的,用于可读性.

猜你在找的Angularjs相关文章