在服务中使用服务
Use service inside service
我正在尝试向 Http 添加一些功能,当用户收到 403 时,它会删除他的用户信息并重定向到登录。 AuthHttp 示例如下所示。
@Injectable()
export class AuthHttp {
constructor(
private http: Http,
private router: Router,
private authService: AuthService
) { }
get(url: string, options?: RequestOptionsArgs): Observable<any> {
return this.http.get(url, options)
.catch(this.errorHandler);
}
errorHandler(error: any): Observable<any> {
if (error.status === 403) {
console.error('TOKEN EXPIRED!');
this.authService.logout();
let link = ['/login'];
this.router.navigate(link);
}
return Observable.throw(error);
}
}
问题是,我会收到以下错误:
EXCEPTION: this.authService is undefined
我不知道如何解决这个问题,因为我正在尝试在服务中使用服务。我在提供商内部添加了 AuthService,如下所示
providers: [
...,
AuthService
]
路由器会抛出类似的错误。
是因为errorHandler
方法,以及this
所指的上下文。当您将函数指定为回调
时,您应该将函数绑定到 this
.catch(this.errorHandler.bind(this));
或者如果你把errorHandler
做成箭头函数,this
(指服务实例)会被维护
errorHandler = (error: any): Observable<any> => {
我正在尝试向 Http 添加一些功能,当用户收到 403 时,它会删除他的用户信息并重定向到登录。 AuthHttp 示例如下所示。
@Injectable()
export class AuthHttp {
constructor(
private http: Http,
private router: Router,
private authService: AuthService
) { }
get(url: string, options?: RequestOptionsArgs): Observable<any> {
return this.http.get(url, options)
.catch(this.errorHandler);
}
errorHandler(error: any): Observable<any> {
if (error.status === 403) {
console.error('TOKEN EXPIRED!');
this.authService.logout();
let link = ['/login'];
this.router.navigate(link);
}
return Observable.throw(error);
}
}
问题是,我会收到以下错误:
EXCEPTION: this.authService is undefined
我不知道如何解决这个问题,因为我正在尝试在服务中使用服务。我在提供商内部添加了 AuthService,如下所示
providers: [
...,
AuthService
]
路由器会抛出类似的错误。
是因为errorHandler
方法,以及this
所指的上下文。当您将函数指定为回调
this
.catch(this.errorHandler.bind(this));
或者如果你把errorHandler
做成箭头函数,this
(指服务实例)会被维护
errorHandler = (error: any): Observable<any> => {