我在Angular中使用过rxjs,并且我熟悉/proc/<pid of your process>/<file of interest>
流中catchError
运算符的使用,尤其是对于HttpClient(XHR)调用
我的问题是pipe
操作如何工作?如何在后台发现错误?
https://www.learnrxjs.io/operators/error_handling/catch.html
catchError
更新:
使用“已接受答案”中的详细信息,我在StackBlitz TypeScript项目中对以下内容进行了测试。看到正在使用try / catch和Subscriber.error的好例子:
import { throwError, of } from 'rxjs';
import { catchError } from 'rxjs/operators';
//emit error
const source = throwError('This is an error!');
//gracefully handle error, returning observable with error message
const example = source.pipe(catchError(val => of(`I caught: ${val}`)));
//output: 'I caught: This is an error'
const subscribe = example.subscribe(val => console.log(val));
答案 0 :(得分:4)
catchError
操作符不会像使用try
/ catch
语句捕获异常一样直接捕获错误。
在内部,它订阅应用了源的可观察的源,并镜像源的next
和complete
通知-也就是说,这些通知不更改地流经运算符。
但是,如果操作员收到error
通知,它将错误传递到提供的回调中,从而为操作员的调用者提供了处理错误的机会。
通过调用订户的error
方法,可以在一种可观察的实现中实现error
通知,如下所示:
const source = new Observable<string>(subscriber => {
subscriber.error(new Error'Kaboom!'));
});
在这里,不会引发任何异常,也不需要try
/ catch
。错误会传递给订阅者-catchError
操作符订阅源,因此it's the subscriber-通过其error
方法。
问题is implemented中使用throwError
函数的方式。
error
通知也可以通过引发异常来实现,如下所示:
const source = new Observable<string>(subscriber => {
throw new Error('Kaboom!');
});
此处,implementation of Observable.subscribe
中的try
/ catch
语句将捕获异常,并将通过调用订阅者的error
方法将错误通知传递给订阅者。 / p>
Observable
和运算符实现负责捕获引发的异常。
无论是否传递了用户指定的功能-例如,在map
之类的运算符中-对这些功能的调用都是wrapped in a try
/catch
statements,任何捕获的异常都将作为error
通知传递给订阅者通过订户的error
方法。