catchError
从一个错误事件中恢复,将错误事件替换成一个备选序列

catchError 操作符将会拦截一个 error 事件,将它替换成其他的元素或者一组元素,然后传递给观察者。这样可以使得 Observable 正常结束,或者根本都不需要结束。
这里存在其他版本的 catchError 操作符。
演示
1. let disposeBag = DisposeBag()
3. let sequenceThatFails = PublishSubject<String>()
4. let recoverySequence = PublishSubject<String>()
6. sequenceThatFails
7. .catchError {
8. print("Error:", $0)
9. return recoverySequence
10. }
11. .subscribe { print($0) }
12. .disposed(by: disposeBag)
14. sequenceThatFails.onNext("?")
15. sequenceThatFails.onNext("?")
16. sequenceThatFails.onNext("?")
17. sequenceThatFails.onNext("?")
18. sequenceThatFails.onError(TestError.test)
20. recoverySequence.onNext("?")
输出结果:
1. next(?)
2. next(?)
3. next(?)
4. next(?)
5. Error: test
6. next(?)
catchErrorJustReturn
catchErrorJustReturn 操作符会将error 事件替换成其他的一个元素,然后结束该序列。
演示
1. let disposeBag = DisposeBag()
2. let sequenceThatFails = PublishSubject<String>()
4. sequenceThatFails
5. .catchErrorJustReturn("?")
6. .subscribe { print($0) }
7. .disposed(by: disposeBag)
9. sequenceThatFails.onNext("?")
10. sequenceThatFails.onNext("?")
11. sequenceThatFails.onNext("?")
12. sequenceThatFails.onNext("?")
13. sequenceThatFails.onError(TestError.test)
输出结果:
1. next(?)
2. next(?)
3. next(?)
4. next(?)
5. next(?)
6. completed
