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)
                */
            })
        )

    })