当前位置: 首页 > 文档资料 > RxSwift 中文文档 >

catchError

优质
小牛编辑
131浏览
2023-12-01

catchError

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

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

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


演示

let disposeBag = DisposeBag()

let sequenceThatFails = PublishSubject<String>()
let recoverySequence = PublishSubject<String>()

sequenceThatFails
    .catchError {
        print("Error:", $0)
        return recoverySequence
    }
    .subscribe { print($0) }
    .disposed(by: disposeBag)

sequenceThatFails.onNext("")
sequenceThatFails.onNext("")
sequenceThatFails.onNext("")
sequenceThatFails.onNext("")
sequenceThatFails.onError(TestError.test)

recoverySequence.onNext("")

输出结果:

next()
next()
next()
next()
Error: test
next()

catchErrorJustReturn

catchErrorJustReturn 操作符会将error 事件替换成其他的一个元素,然后结束该序列。


演示

let disposeBag = DisposeBag()
let sequenceThatFails = PublishSubject<String>()

sequenceThatFails
    .catchErrorJustReturn("")
    .subscribe { print($0) }
    .disposed(by: disposeBag)

sequenceThatFails.onNext("")
sequenceThatFails.onNext("")
sequenceThatFails.onNext("")
sequenceThatFails.onNext("")
sequenceThatFails.onError(TestError.test)

输出结果:

next()
next()
next()
next()
next()
completed