在服务器发出401响应的情况下,我有一个工作代码调用了logout()方法。当我将Angular从5.2升级到7.0.3时,它不再起作用。我认为必须是具有修改后的HttpInterceptor接口或许多rxjs重大更改的东西。现在看起来像这样,并在代码下面抛出错误。
export class UnauthInterceptor implements HttpInterceptor {
private session: SessionProvider;
constructor(private injector:Injector) {}
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
this.session = this.injector.get(SessionProvider);
return next.handle(request).pipe(catchError(err => {
if (err.status === 401) {
// auto logout if 401 response returned from api
this.session.logout();
}
})
);
}}
tsc引发以下错误:
src / app / interceptors / unauth.interceptor.ts:19:51-错误TS2345: 类型'(err:any)=> void'的参数不能分配给参数 类型'(err:any,catch:Observable>)=> ObservableInput <{}>'。
无法将类型“ void”分配给类型“ ObservableInput <{}>”。19返回next.handle(request).pipe(catchError(err => {
答案 0 :(得分:2)
您好,您必须返回带有catchError的可观察对象,如:
return throwError(error)