RxJS 如何使用默认的错误处理函数返回 Observable [英] RxJS how to return Observable with default error handling function

查看:63
本文介绍了RxJS 如何使用默认的错误处理函数返回 Observable的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的应用程序中,我有一些返回 Observable 的方法:

In my application I have some methods returning an Observable:

public myMethodReturningObs(...): Observable {
  return this.http.get(...); // this will return an Observable
}

然后我在我的应用程序周围的几个地方调用这个方法:

then I call this method in several places around my application:

this.service.myMethodReturningObs().subscribe(
 (data) => { /* do something with data */ },
 (error) => { console.log('Error!'); }
);

// ...

this.service.myMethodReturningObs().subscribe(
 (data) => { /* do something else with data */ },
 (error) => { console.log('Error!'); }
);

我想知道 myMethodReturningObs(...) 中是否有一种方法可以附加默认的错误处理函数,在我的示例中是 console.log('Error!');,这样我就不用每次订阅myMethodReturningObs(...)返回的Observable时都重复一遍.

I was wondering if there is a way inside myMethodReturningObs(...) to attach the a default error handling function, which in my example would be console.log('Error!');, so I don't have to repeat it every time I subscribe to the Observable returned by myMethodReturningObs(...).

理想情况下,我需要这样的东西:

Ideally I need something like:

public myMethodReturningObs(...): Observable {
  return this.http.get(...)
   .onError({ console.log('Error!'); }); // this will return an Observable
}

所以我可以这样做:

this.service.myMethodReturningObs().subscribe(
 (data) => { /* do something with data */ }
);

// ...

this.service.myMethodReturningObs().subscribe(
 (data) => { /* do something else with data */ }
);

推荐答案

您可以在基本 observable 中捕获错误,记录并进一步传播

You can catch error in base observable, log it and propogate further

public myMethodReturningObs(...): Observable {
  return this.http.get(...)
        .catch(e => {
          // log error
          console.error('Failed', e);
          // return same error, so subscriptions also fail
          return Rx.Observable.throw(e)
        });
}

这篇关于RxJS 如何使用默认的错误处理函数返回 Observable的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆