首页 > 解决方案 > canActivated 保护的返回值错误

问题描述

我写下面的代码作为我的主页保护,用于checkTokenValidation()验证用户的身份验证令牌,但我的 IDE 显示此错误:声明类型既不是“void”也不是“any”的函数必须返回一个值。我返回我的订阅布尔值,但我不知道为什么我有这个问题。我测试了我的代码并了解我的代码不会将我的返回行执行为真或假,这很奇怪。

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {

    this.authService.checkTokenValidation().subscribe((data) => {
      console.log(data);
      if (data['ok']) {
        this.router.navigate(['/overview']);
        return false;
      } else {
        return true;
      }
    });

  }

标签: angular

解决方案


通过订阅,您将返回 aSubscription而不是Observable. 您应该映射到所需的值并返回Observable

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
    return this.authService.checkTokenValidation().pipe(
      map( (data) => {
       if (data['ok']) {
         this.router.navigate(['/overview']);
         return false;
       } else {
         return true;
       }
     })
   );
}

推荐阅读