选择哪个RxJS操作符来处理HTTP错误:tap还是catchError? /*下面将在带有catchError()的管道中使用的错误处理程序 *使用HttpClient get()获取资源时*/ 私有句柄错误(操作:字符串,结果?:T){ 返回(错误:任意):可观察=>{ 控制台错误(操作+“”+错误消息); //或者其他我想做的事 返回(结果为T);//让我返回无害的结果 } } getObjects(){ 返回this.http.get(this.myUrl).pipe( catchError(this.\u handleError('我的错误',[])) ); }

选择哪个RxJS操作符来处理HTTP错误:tap还是catchError? /*下面将在带有catchError()的管道中使用的错误处理程序 *使用HttpClient get()获取资源时*/ 私有句柄错误(操作:字符串,结果?:T){ 返回(错误:任意):可观察=>{ 控制台错误(操作+“”+错误消息); //或者其他我想做的事 返回(结果为T);//让我返回无害的结果 } } getObjects(){ 返回this.http.get(this.myUrl).pipe( catchError(this.\u handleError('我的错误',[])) ); },rxjs,angular-httpclient,Rxjs,Angular Httpclient,现在使用点击来处理错误 getObjects(){ 返回this.http.get(this.myUrl).pipe( 轻触(对象=>{ //任何动作,比如记录消息 },err=>{ 控制台错误(err); //我还想做什么 }) ); } 为什么我应该选择一种方法而不是另一种方法?使用tap()处理HTTP错误会使我的应用程序在出现错误时保持运行吗?tap会产生副作用 catchError是捕获流中的错误并尝试处理它们 因此,如果要处理http请求的错误,请使用catchError http

现在使用
点击
来处理错误

getObjects(){
返回this.http.get(this.myUrl).pipe(
轻触(对象=>{
//任何动作,比如记录消息
},err=>{
控制台错误(err);
//我还想做什么
})
);
}

为什么我应该选择一种方法而不是另一种方法?使用
tap()
处理HTTP错误会使我的应用程序在出现错误时保持运行吗?

tap
会产生副作用

catchError
是捕获流中的错误并尝试处理它们

因此,如果要处理
http
请求的错误,请使用
catchError

http.get('https://test.com/)。烟斗(
水龙头(
() => {
//200,太棒了!没有错误会触发它。
},
() => {
//错误就在这里,但我们只能称之为次要的东西。
},
),
捕捉错误(
(错误:HttpErrorResponse):可观察=>{
//我们期待404,这对我们来说不是失败。
如果(error.status==404){
返回(null);//或任何其他流,如(“”)等。
}
//其他错误,我们不知道如何处理和抛出他们进一步。
返回投掷器(错误);
},
),
).订阅(
响应=>{
//200以正确的响应触发它。
//404用null触发它。`tap`不能使404再次有效。
},
错误=>{
//除了404之外的任何错误都将出现在这里。
},
);

tap
只是产生副作用,它根本不会修改链,因此要处理错误,请使用
catchError
。不完全是这样,tap有第二个参数,在出现错误时会调用;)这是一个很棒的示例。谢谢