【发布时间】:2018-10-22 01:29:44
【问题描述】:
我写了一个函数是pipe-able:
HandleHttpBasicError<T>()
{
return ((source:Observable<T>) => {
return source.pipe(
catchError((err:any) => {
let msg = '';
if(err && err instanceof HttpErrorResponse)
{
if(err.status == 0)
msg += "The server didn't respond";
}
throw {
err,
msg
} as CustomError
})
)
})
}
我可以在我的HttpService 中以这种方式使用此功能:
checkExist(id:string)
{
return this.http.head<void>(environment.apiUrl + 'some_url/' + id)
.pipe(
HandleHttpBasicError(),
catchError((err:CustomError) => {
if(err.msg)
throw err.msg;
if(err.err.status == HttpStatusCodes.NOT_FOUND)
throw("It doesn't exist.");
throw(err);
})
)
}
效果很好。当我订阅checkExist() 时,我收到了一条很好的错误消息,因为HandleHttpBasicError 首先捕获了一个错误并将其抛出到服务的catchError(),它会抛出错误消息,因为它不是null。
这样,它允许我拥有一个全局 catchError() 来处理始终相同的错误消息。将来,我会在HttpHandler 中进行,但这不是重点。
可以用throw 关键字链接错误吗?
我试图返回Observable.throwError(),但是浏览器说
Observable.throwError 不是函数
我的导入是import {Observable, of, throwError} from 'rxjs';。
这样做不是更好吗:
return ((source:Observable<T>) => {
return source.pipe(
catchError((err:any) => {
msg = '';
...
return of({err, msg} as CustomError)
/* instead of
throw(err)
-or-
return Observable.throwError(err) (which doesn't work)
*/
})
)
})
?
【问题讨论】:
标签: rxjs angular-http rxjs6