RxSwift笔记 - Error Handling Operators

57 篇文章 1 订阅
23 篇文章 0 订阅


CatchError

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

Catch.png

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

sequenceThatFails.catchError { (error) -> Observable<String> in
        print("error: ", error)
        return recoverySequence
    }.subscribe(onNext: {
        print($0)
    }).disposed(by: disposeBag)

sequenceThatFails.onNext("A")
sequenceThatFails.onNext("B")
sequenceThatFails.onNext("C")
sequenceThatFails.onNext("D")
sequenceThatFails.onError(HHError(name: "test"))
recoverySequence.onNext("1")
recoverySequence.onNext("2")

/*
 A
 B
 C
 D
 error:  __lldb_expr_144.HHError
 1
 2
 */

CatchErrorJustReturn

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

onErrorReturn.png

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

sequenceThatFails.onNext("1")
sequenceThatFails.onNext("2")
sequenceThatFails.onNext("3")
sequenceThatFails.onError(HHError(name: "test"))

/*
666
 */

Retry

如果源 Observable 产生一个错误事件,重新对它进行订阅,希望它不会再次产生错误

retry.C.png

var count = 1
let canErrorSequence = Observable<String>.create { (observer) -> Disposable in
    observer.onNext("A")
    observer.onNext("B")
    observer.onNext("C")

    if count == 1 {
        observer.onError(HHError.init(name: "text"))
        print("Error encountered")
        count += 1
    }

    observer.onNext("1")
    observer.onNext("2")
    observer.onNext("3")
    observer.onCompleted()

    return Disposables.create()

}

canErrorSequence.retry().subscribe(onNext: {
    print($0)
}).disposed(by: disposeBag)

/*
 A
 B
 C
 Error encountered
 A
 B
 C
 1
 2
 3
 */

Debug

将 debug 调试操作符添加到一个链式步骤当中,这样系统就能将所有的订阅者、事件、和处理等详细信息打印出来,方便我们开发调试

/// debug() 不传参数 打印当前方法名
Observable.of("A", "B", "C", "D", "E", "F", "G").debug().subscribe(onNext: {
    print($0)
}).disposed(by: disposeBag)

/// debug() 传参数 打印参数名
Observable.of("A", "B", "C", "D", "E", "F", "G").debug("调试:").subscribe(onNext: {
    print($0)
}).disposed(by: disposeBag)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值