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(错误处理)
  • 相关阅读:
    屏蔽2003:在系统启动时至少有一个服务或驱动程序产生错误
    C#中有关string和byte[]转换的问题
    如何控制winform程序只能打开一个呢?
    ArrayList的使用方法【转载】
    ASP.NET中ajaX学习记录
    C#去除字符串空格的几种方法【转载】
    C# 中2,10,16进制及其ASCII码之间转化
    vc++下char数组赋值乱码问题
    c#关机时自动退出程序
    Android入门前言(一)之Android应用开发入门五问 (转自:http://blog.csdn.net/android_tutor/)
  • 原文地址:https://www.cnblogs.com/strengthen/p/13674990.html
Copyright © 2011-2022 走看看