zoukankan      html  css  js  c++  java
  • [RxSwift教程]15、错误处理

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
    ➤微信公众号:山青咏芝(let_us_code)
    ➤博主域名:https://www.zengqiang.org
    ➤GitHub地址:https://github.com/strengthen/LeetCode
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

    十五、错误处理操作(Error Handling Operators)

    错误处理操作符可以用来帮助我们对 Observable 发出的 error 事件做出响应,或者从错误中恢复。
    这里我们先自定义一个错误枚举供后面使用:
    1
    2
    3
    4
    enum MyErrorError {
        case A
        case B
    }
     

    1,catchErrorJustReturn

    (1)基本介绍
    • 当遇到 error 事件的时候,就返回指定的值,然后结束。
     
    (2)使用样例
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    let disposeBag = DisposeBag()
     
    let sequenceThatFails = PublishSubject<String>()
     
    sequenceThatFails
        .catchErrorJustReturn("错误")
        .subscribe(onNext: { print($0) })
        .disposed(by: disposeBag)
     
    sequenceThatFails.onNext("a")
    sequenceThatFails.onNext("b")
    sequenceThatFails.onNext("c")
    sequenceThatFails.onError(MyError.A)
    sequenceThatFails.onNext("d")

    运行结果如下:

    原文:Swift - RxSwift的使用详解15(错误处理)

    2,catchError

    (1)基本介绍
    • 该方法可以捕获 error,并对其进行处理。
    • 同时还能返回另一个 Observable 序列进行订阅(切换到新的序列)。
    原文:Swift - RxSwift的使用详解15(错误处理)
    (2)使用样例
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    let disposeBag = DisposeBag()
     
    let sequenceThatFails = PublishSubject<String>()
    let recoverySequence = Observable.of("1""2""3")
     
    sequenceThatFails
        .catchError {
            print("Error:", $0)
            return recoverySequence
        }
        .subscribe(onNext: { print($0) })
        .disposed(by: disposeBag)
     
    sequenceThatFails.onNext("a")
    sequenceThatFails.onNext("b")
    sequenceThatFails.onNext("c")
    sequenceThatFails.onError(MyError.A)
    sequenceThatFails.onNext("d")

    运行结果如下:

    原文:Swift - RxSwift的使用详解15(错误处理)
     

    3,retry

    (1)基本介绍
    • 使用该方法当遇到错误的时候,会重新订阅该序列。比如遇到网络请求失败时,可以进行重新连接。
    • retry() 方法可以传入数字表示重试次数。不传的话只会重试一次。
    原文:Swift - RxSwift的使用详解15(错误处理)

    (2)使用样例

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    let disposeBag = DisposeBag()
    var count = 1
     
    let sequenceThatErrors = Observable<String>.create { observer in
        observer.onNext("a")
        observer.onNext("b")
         
        //让第一个订阅时发生错误
        if count == 1 {
            observer.onError(MyError.A)
            print("Error encountered")
            count += 1
        }
         
        observer.onNext("c")
        observer.onNext("d")
        observer.onCompleted()
         
        return Disposables.create()
    }
     
    sequenceThatErrors
        .retry(2)  //重试2次(参数为空则只重试一次)
        .subscribe(onNext: { print($0) })
        .disposed(by: disposeBag)运行结果如下:

    运行结果如下:

    原文:Swift - RxSwift的使用详解15(错误处理)
  • 相关阅读:
    [图形学] 结束 [Unity Shader] 开始
    [图形学] Chp18 OpenGL表面纹理函数
    [图形学] Chp17 OpenGL光照和表面绘制函数
    [图形学] Chp14 GLU曲面裁剪函数程序示例及样条表示遗留问题
    [图形学] Chp10 OpenGL三维观察程序示例
    [图形学] 问题: 裁剪窗口坐标对应显示窗口中像素是一对一还是一对多?
    [图形学] Chp9 三维几何变换--栈处理函数与矩阵管理函数的区别
    [图形学] 习题8.12 NLN二维线段裁剪算法实现
    [图形学] 习题8.6 线段旋转后使用Cohen-Sutherland算法裁剪
    [图形学] Chp8 使用双缓存创建帧动画
  • 原文地址:https://www.cnblogs.com/strengthen/p/13674990.html
Copyright © 2011-2022 走看看