如何在可观察的管道上捕获错误?



这是我的代码:

refreshToken(): Observable<any> {
if (this.refreshTokenInProgress) {
return new Observable(observer => {
this.tokenRefreshed$.subscribe(() => {
observer.next();
observer.complete();
});
});
} else {
this.refreshTokenInProgress = true;
return this.api.refreshToken().pipe(
tap(res => {
this.api.setAccessToken(res.access_token);
this.refreshTokenInProgress = false;
this.tokenRefreshedSource.next(true);
}),
catchError(() => {
this.refreshTokenInProgress = false;
this.ngZone.run(() => this.router.navigateByUrl('/account/signin'));
})
);
}
}

但我在catchError(() => {:类型为"((=>void"不可分配给"类型的参数(err:any,catch:Observable(=>ObservableInput。类型"void"不可分配给类型"ObservableInput">

这种情况下我应该使用什么?

再次使用语法。使用正确的类型,并在运算符中返回正确的类型。

refreshToken(): Observable<any> {
if (this.refreshTokenInProgress) {
return this.tokenRefreshed$.pipe(take(1));
} else {
this.refreshTokenInProgress = true;
return this.api.refreshToken().pipe(
tap(res => {
this.api.setAccessToken(res.access_token);
this.refreshTokenInProgress = false;
this.tokenRefreshedSource.next(true);
}),
catchError((error) => {
this.refreshTokenInProgress = false;
this.ngZone.run(() => this.router.navigateByUrl('/account/signin'));
// If you want to "accept" the error
return of(null);
// If you want to "propagate" the error
return throwError(error);
})
);
}
}

最新更新