Angular 9 - 拦截器 - return 如果 catchererror 没有错误怎么办?
Angular 9 - interceptor - what to return if no error in catcherror?
我在 angular 应用程序中有一个拦截器
整个想法是有一个 jwt 令牌有效期为 30'
偶尔状态码报错,所以我处理一下
但有时,没有错误,所以我不想抛出任何异常
因为我什么都没有 return 我得到这个错误
您提供了 'undefined' 预期流的位置。您可以提供 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;
}
}))
}
我用什么 return 代替 <<<<<<<<<<<<<<<<<<<<<<<<<<< ???
谢谢你帮助我
如错误所述,RxJS catchError
运算符必须 return 一个可观察对象。但是当你不想抛出错误时,你可以使用 RxJS of
函数来 return 一个有效的通知。它将调用可观察对象的 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
回调,您可以 return EMPTY
常量来完成可观察对象。
import { EMPTY } from 'rxjs';
default: {
if (error != "OK") {
return throwError(error);
}
return EMPTY; // <-- complete the observable
break;
}
我在 angular 应用程序中有一个拦截器
整个想法是有一个 jwt 令牌有效期为 30'
偶尔状态码报错,所以我处理一下
但有时,没有错误,所以我不想抛出任何异常
因为我什么都没有 return 我得到这个错误
您提供了 'undefined' 预期流的位置。您可以提供 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;
}
}))
}
我用什么 return 代替 <<<<<<<<<<<<<<<<<<<<<<<<<<< ???
谢谢你帮助我
如错误所述,RxJS catchError
运算符必须 return 一个可观察对象。但是当你不想抛出错误时,你可以使用 RxJS of
函数来 return 一个有效的通知。它将调用可观察对象的 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
回调,您可以 return EMPTY
常量来完成可观察对象。
import { EMPTY } from 'rxjs';
default: {
if (error != "OK") {
return throwError(error);
}
return EMPTY; // <-- complete the observable
break;
}