[英]Angular 9 - interceptor - what to return if no error in catcherror?
我在一個有角度的應用程序中有一個攔截器
整個想法是有一個對 30' 有效的jwt 令牌
偶爾我會從狀態代碼中得到一個錯誤,所以我會處理它
但有時,沒有錯誤,所以我不想拋出任何異常
因為我沒有返回任何東西,所以我收到了這個錯誤
您在需要流的地方提供了“未定義”。 您可以提供 Observable、Promise、Array 或 Iterable。
除非我拋出像 throwError("OK"); 這樣的假異常;
這是我的攔截功能
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>>
{
return next.handle(request).pipe(catchError(err =>
{
const error = (err.error?err.error.message:null) || err.statusText;
switch (err.status) {
case 401:
{
// token expired -> goto login, dont return error
this.appService.clearUserSession();
this.router.navigate(['login']);
<<<<<<<<<<<<<<< HERE I DON'T WANT TO THROW AN ERROR, WHAT TO RETURN ?
}
break;
case 500:
{
return throwError(error);
}
break;
default:
{
if(error!="OK")
{
return throwError(error);
}
else
{
// some errors are "OK", just ignore them
<<<<<<<<<<<<<<< HERE I DON'T WANT TO THROW AN ERROR, WHAT TO RETURN ?
}
}
break;
}
}))
}
我應該返回什么來代替 <<<<<<<<<<<<<<<<<<<<<<<<<<<< ????
謝謝你幫助我
就像錯誤所說的那樣,RxJS catchError
操作符必須返回一個 observable。 但是,當你想不摔錯誤,您可以使用RxJS of
函數返回一個有效的通知。 它將調用 observable 的next
回調而不是error
。
import { of } from 'rxjs';
intercept(request: HttpRequest < any > , next: HttpHandler): Observable < HttpEvent < any >> {
return next.handle(request).pipe(catchError(err => {
const error = (err.error ? err.error.message : null) || err.statusText;
switch (err.status) {
case 401: {
// token expired -> goto login, dont return error
this.appService.clearUserSession();
this.router.navigate(['login']);
return of(error); // <-- return observable using `of`
break;
}
case 500: {
return throwError(error);
break;
}
default: {
if (error != "OK") {
return throwError(error);
}
return of(error); // <-- return observable using `of`
break;
}
}
}));
}
或者如果你不想調用next
回調,你可以返回EMPTY
常量來完成可觀察的。
import { EMPTY } from 'rxjs';
default: {
if (error != "OK") {
return throwError(error);
}
return EMPTY; // <-- complete the observable
break;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.