美文网首页
十、错误处理操作-Error Handling Oper

十、错误处理操作-Error Handling Oper

作者: 七夕猪 | 来源:发表于2016-06-28 17:41 被阅读121次

注意:使用本例中的代码首先应该导入头文件,代码如下:

import RxSwift

Error Handling Operators

该操作帮助重新覆盖来自Observable的错误通知。

catchErrorJustReturn

通过返回一个发散单一元素且随后终止的Observable序列来重新覆盖一个 Error 事件。了解更多

example("catchErrorJustReturn") {
    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)
}

Debug Area 输出:
--- catchErrorJustReturn example ---
Next(😬)
Next(😨)
Next(😡)
Next(🔴)
Next(😊)
Completed


catchError

通过切换到另一个具有恢复功能的Observable序列的方式来覆盖 Error 事件。�了解更多

example("catchError") {
    let disposeBag = DisposeBag()

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

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

    sequenceThatFails.onNext("😬")
    sequenceThatFails.onNext("😨")
    sequenceThatFails.onNext("😡")
    sequenceThatFails.onNext("🔴")
    sequenceThatFails.onError(TestError.test)
    
    recoverySequence.onNext("😊")
}

Debug Area 输出:
--- catchError example ---
Next(😬)
Next(😨)
Next(😡)
Next(🔴)
Error: Test
Next(😊)


retry

通过重新订阅Observable序列的方式来覆盖 Error 事件,直到没有 Error 事件为止。�了解更多

example("retry") {
    let disposeBag = DisposeBag()
    var count = 1

    let sequenceThatErrors = Observable<String>.create { observer in
        observer.onNext("🍎")
        observer.onNext("🍐")
        observer.onNext("🍊")

        if count == 1 {
            observer.onError(TestError.test)
            print("Error encountered")
            count += 1
        }
        observer.onNext("🐶")
        observer.onNext("🐱")
        observer.onNext("🐭")
        observer.onCompleted()

        return Disposables.create()
    }

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

Debug Area 输出:
--- retry example ---
🍎
🍐
🍊
Error encountered
🍎
🍐
🍊
🐶
🐱
🐭


retry(_:)

通过重新订阅Observable序列的方式来覆盖 Error 事件,直到重新订阅的次数达到maxAttemptCount的数量为止。�了解更多

example("retry maxAttemptCount") {
    let disposeBag = DisposeBag()
    var count = 1

    let sequenceThatErrors = Observable<String>.create { observer in
        observer.onNext("🍎")
        observer.onNext("🍐")
        observer.onNext("🍊")

        if count < 5 {
            observer.onError(TestError.test)
            print("Error encountered")
            count += 1
        }
        observer.onNext("🐶")
        observer.onNext("🐱")
        observer.onNext("🐭")
        observer.onCompleted()

        return Disposables.create()
    }

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

Debug Area 输出:
--- retry maxAttemptCount example ---
🍎
🍐
🍊
Error encountered
🍎
🍐
🍊
Error encountered
🍎
🍐
🍊
Error encountered


下一篇: ��十一、�����调试操作-Debugging Operators(Rx.playground翻译)�

相关文章

网友评论

      本文标题:十、错误处理操作-Error Handling Oper

      本文链接:https://www.haomeiwen.com/subject/pwltjttx.html