Rxjs 如何通过catchError()正确传播错误?
我编写了一个函数,它是Rxjs 如何通过catchError()正确传播错误?,rxjs,angular-http,rxjs6,Rxjs,Angular Http,Rxjs6,我编写了一个函数,它是pipe-able: HandleHttpBasicError<T>() { return ((source:Observable<T>) => { return source.pipe( catchError((err:any) => { let msg = ''; if(err && err instance
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
})
)
})
}
它工作得很好。当我订阅checkExist()
时,我会收到一条很好的错误消息,因为HandleHttpBasicError
首先捕获一个错误并将其抛出服务的catchError()
,该服务通过错误消息,因为它不是null
这样,我就可以拥有一个全局的catchError()
,它可以处理始终相同的错误消息。将来,我将在一个HttpHandler
中执行此操作,但这不是重点
用throw
关键字链接错误可以吗
我试图返回可观察的.throwError(),但浏览器说
投掷者不是一个函数
我的导入是从“rxjs”导入{Observable,of,throwError}代码>
这样做不是更好吗:
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)
*/
})
)
})
返回((来源:可观察)=>{
返回源管道(
catchError((err:any)=>{
味精='';
...
返回({err,msg}作为CustomError)
/*而不是
投掷(错误)
-或-
返回可观察的投掷者(err)(不起作用)
*/
})
)
})
?
用throw关键字链接错误可以吗
是的,很好。rxjs try捕获此类情况并将其转换为错误通知
我试图返回Observable.throwError(),但浏览器显示“Observable.throwError不是函数”
在rxjs6中,可观察的
原型不再修改为包含运算符或这些»创建运算符«,而是作为独立函数公开。你可以阅读更多关于它的内容,但要点是你只需返回投掷者(…),例如
返回源$.pipe(
catchError(err=>err.code==404
?投掷者(“未找到”)
:投掷者(错误)
)
)
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)
*/
})
)
})