未捕获(承诺):错误:无效的 CanActivate 防护

lea*_*ird 6 angular7

我是 angular 7 的新手,现在正在尝试实现 CanActive,但我收到错误:

在此处输入图片说明

谁能指导我克服这个问题。我的代码示例如下:

auth.guard.ts :

import { Injectable } from '@angular/core';
import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
import { Observable } from 'rxjs';
import { AuthService } from './auth-service.service';
import {Router} from '@angular/router';

@Injectable({
  providedIn: 'root'
})
export class AuthGuard implements CanActivate {
  constructor(private auth: AuthService,
              private myRoute: Router){
  }

  canActivate(
    next: ActivatedRouteSnapshot,
    state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
    if (this.auth.isLoggednIn()){
      return true;
    } else {
      this.myRoute.navigate(["login"]);
      return false;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

Ent*_*ain 2

您使用 Promise 作为if条件,并且 Promise 可能会引发错误。因此,您可以简单地用 try/catch 块包装它,也可以将它包装在另一个 Promise 实例中,并通过使用将resolve其进一步传递来返回身份验证结果:

canActivate(
    next: ActivatedRouteSnapshot,
    state: RouterStateSnapshot): Promise<boolean> | boolean {
       return new Promise(resolve =>
         this.auth.isLoggednIn()
           .then(status: boolean => {
             if(status === false) {
               this.myRoute.navigate(["login"]);
             }
             resolve(status);
           })
           .catch(() => {
             this.myRoute.navigate(["login"]);
             resolve(false);
             // ... or any other way you want to handle such error case
           })
      }
    }
Run Code Online (Sandbox Code Playgroud)