我在一个角度应用程序中有一个拦截器
整个想法是,有一个jwt令牌对30'有效
因为我没有返回任何东西,所以我得到了这个错误
您提供了“未定义”的流。您可以提供一个可观察的、承诺的、数组的或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;
}
}))
}
我要返回什么来代替<<<<<<<<<<<<<<<<<<<<<<<<<<<<?
谢谢你帮我
发布于 2020-10-06 03:19:43
正如错误说明的那样,RxJS catchError
运算符必须返回一个可观察的。但是,当您不想抛出错误时,可以使用RxJS of
函数返回有效的通知。它将调用可观察对象的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;
}
https://stackoverflow.com/questions/64224634
复制相似问题