RxSwift (8) 错误处理

本文介绍了RxSwift中处理错误的两个关键操作符:catchErrorJustReturn和retry。catchErrorJustReturn在遇到错误事件时返回指定值,而retry则允许在发生错误时自动重试订阅,如retry(3)会尝试重试三次,retry()则默认重试一次。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

catchErrorJustReturn

发送错误信号的时候,转换为指定的信息 发送

func rx_catchErrorJustReturn() {
    let disposeBag = DisposeBag()

    let sequenceThatFails = PublishSubject<String>()

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

    sequenceThatFails.onNext("1")
    sequenceThatFails.onNext("2")
    sequenceThatFails.onNext("3")
    sequenceThatFails.onNext("4")
    sequenceThatFails.onError(RxError.timeout)
}
打印结果:
next(1)
next(2)
next(3)
next(4)
next(haveError is timeout)
completed

catchErrorJustReturn

发生错误,返回另一个 序列 继续订阅

func rx_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("1")
    sequenceThatFails.onNext("2")
    sequenceThatFails.onNext("3")
    sequenceThatFails.onNext("4")
    sequenceThatFails.onError(TestError.test)

    recoverySequence.onNext("5")
}
打印结果
next(1)
next(2)
next(3)
next(4)
Error: test//发生错误信号,切换序列继续订阅
next(5)

retry

遇见error事件进行重试,retry(3)重试3次,retry()无参重试一次

func rx_retry() {
    let disposeBag = DisposeBag()
    var count = 1

    let sequenceThatErrors = Observable<String>.create { observer in
        observer.onNext("1")
        observer.onNext("2")
        observer.onNext("3")

        if count == 1 {
            observer.onError(TestError.test)
            print("Error encountered")
            count += 1
        }

        observer.onNext("4")
        observer.onNext("5")
        observer.onNext("6")
        observer.onCompleted()

        return Disposables.create()
    }

    sequenceThatErrors
        .retry()
        .subscribe(onNext: { print($0) })
        .disposed(by: disposeBag)
}
/*:
 ----
 ## `retry(_:)`
Recovers repeatedly from Error events by resubscribing to the `Observable` sequence, up to `maxAttemptCount` number of retries. [More info](http://reactivex.io/documentation/operators/retry.html)
 ![](https://raw.githubusercontent.com/kzaher/rxswiftcontent/master/MarbleDiagrams/png/retry.png)
 */
打印结果
1
2
3
Error encountered
1
2
3
4
5
6
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值