Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 角度2:返回可见光时的未捕获错误_Angular_Observable - Fatal编程技术网

Angular 角度2:返回可见光时的未捕获错误

Angular 角度2:返回可见光时的未捕获错误,angular,observable,Angular,Observable,我有以下代码: import { Injectable } from '@angular/core'; import { Router, CanActivate } from '@angular/router'; import { Angular2TokenService } from 'angular2-token'; import { Observable } from 'rxjs/Observable'; import 'rxjs/add/operator/map'; import 'r

我有以下代码:

import { Injectable } from '@angular/core';
import { Router, CanActivate } from '@angular/router';
import { Angular2TokenService } from 'angular2-token';
import { Observable } from 'rxjs/Observable';

import 'rxjs/add/operator/map';
import 'rxjs/add/operator/toPromise';
import 'rxjs/add/operator/catch';

@Injectable()
export class AuthGuard implements CanActivate {
  constructor(
    private _tokenService: Angular2TokenService,
    private router: Router) {}

  canActivate():Observable<boolean>|boolean {
    return this._tokenService.validateToken().map(res => {
      return res.json().success;
    });
  }
}
从'@angular/core'导入{Injectable};
从'@angular/Router'导入{Router,CanActivate};
从“angular2令牌”导入{Angular2TokenService};
从“rxjs/Observable”导入{Observable};
导入'rxjs/add/operator/map';
导入“rxjs/add/operator/toPromise”;
导入“rxjs/add/operator/catch”;
@可注射()
导出类AuthGuard实现了CanActivate{
建造师(
私人代币服务:Angular2TokenService,
专用路由器:路由器{}
canActivate():可观察的布尔值{
返回此。_tokenService.validateToken().map(res=>{
返回res.json().success;
});
}
}
当我加载经过
AuthGuard
的页面时,我得到:

未捕获(承诺中):响应状态:401未授权URL:


401状态是预期的。我不明白的是,当响应为401时,如何简单地让我的
canActivate()
函数返回
false
。我如何才能做到这一点?

以下是我最终如何处理它的:

import { Injectable } from '@angular/core';
import { Router, CanActivate } from '@angular/router';
import { Angular2TokenService } from 'angular2-token';
import { Observable } from 'rxjs/Observable';

@Injectable()
export class AuthGuard implements CanActivate {
  constructor(
    private _tokenService: Angular2TokenService,
    private router: Router) {}

  canActivate():Observable<boolean>|boolean {
    return Observable.create(observer => {
      this._tokenService.validateToken().subscribe(res => observer.complete(), err => {
        this.router.navigate(['/sign-in']);
        observer.next(false);
      });
    });
  }
}
从'@angular/core'导入{Injectable};
从'@angular/Router'导入{Router,CanActivate};
从“angular2令牌”导入{Angular2TokenService};
从“rxjs/Observable”导入{Observable};
@可注射()
导出类AuthGuard实现了CanActivate{
建造师(
私人代币服务:Angular2TokenService,
专用路由器:路由器{}
canActivate():可观察的布尔值{
返回可观察的。创建(观察者=>{
此.u令牌服务.validateToken().subscribe(res=>observer.complete(),err=>{
this.router.navigate(['/登录']);
观察者:下一个(假);
});
});
}
}
重要的是我的
subscribe
有两个参数。第一个是成功案例,第二个是错误案例