在路由器中使用订阅可以在 angular2/4 中激活失败

Using subscription in router can activate in angular2/4 fails

我试图保护我的路线,但收到

的错误
Type 'Subscription' is not assignable to type 'boolean 
     | Promise<boolean> | Observable<any>'

所以在路由守卫中有

  canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<any> | Promise<boolean> | boolean {
     return this._authService.checkLoggedin().subscribe((res)=>{
     if(!res){
        console.log("res is not here..")
      }
      return res;

    },(err)=>{

     console.log("error is", err);
  })
 }   

所以我有我的授权服务

  checkLoggedin(): Observable<any> {
    if (!this._accesstokenService.getToken('access_token')) {
      return Observable.of(false); //just checks for localstorage
     }
      //if the access token exists  validate it on the server
    return this._http.post(this.authurl + 'auth/is-loggedin', 1)
      .map((res) => {
       return Observable.of(res);
      });
 }

我哪里错了。我仍然想继续使用来自 checkloggedin 方法的可观察值

您需要 return 在您的 canActivate

中观察而不是订阅
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<any> | Promise<boolean> | boolean {
     return this._authService.checkLoggedin();
 }  

您的 return 签名规定如此,但如果我是您,我会将其设为 return 布尔值并保持简单。