catchError

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

catchError - 图1

catchError 操作符将会拦截一个 error 事件,将它替换成其他的元素或者一组元素,然后传递给观察者。这样可以使得 Observable 正常结束,或者根本都不需要结束。

这里存在其他版本的 catchError 操作符。


演示

  1. let disposeBag = DisposeBag()
  2. let sequenceThatFails = PublishSubject<String>()
  3. let recoverySequence = PublishSubject<String>()
  4. sequenceThatFails
  5. .catchError {
  6. print("Error:", $0)
  7. return recoverySequence
  8. }
  9. .subscribe { print($0) }
  10. .disposed(by: disposeBag)
  11. sequenceThatFails.onNext("😬")
  12. sequenceThatFails.onNext("😨")
  13. sequenceThatFails.onNext("😡")
  14. sequenceThatFails.onNext("🔴")
  15. sequenceThatFails.onError(TestError.test)
  16. 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>()
  3. sequenceThatFails
  4. .catchErrorJustReturn("😊")
  5. .subscribe { print($0) }
  6. .disposed(by: disposeBag)
  7. sequenceThatFails.onNext("😬")
  8. sequenceThatFails.onNext("😨")
  9. sequenceThatFails.onNext("😡")
  10. sequenceThatFails.onNext("🔴")
  11. sequenceThatFails.onError(TestError.test)

输出结果:

  1. next(😬)
  2. next(😨)
  3. next(😡)
  4. next(🔴)
  5. next(😊)
  6. completed