Angularjs   发布时间:2022-04-20  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了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());
}

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

大佬总结

以上是大佬教程为你收集整理的angular – 否定守卫中的承诺结果全部内容,希望文章能够帮你解决angular – 否定守卫中的承诺结果所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。