(*useful)标记:目前觉得有用的函数 //FIXME 标记:待补充 ##帮助捕获错误,并可以发送消息,平滑的处理error


####catchErrorJustReturn

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)
}
复制代码

打印: --- catchErrorJustReturn example --- next(?) next(?) next(?) next(?) next(?) //捕获的error completed

####catchError: 捕获错误,并return一个Observable sequence

example("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("?")sequenceThatFails.onNext("?")sequenceThatFails.onNext("?")sequenceThatFails.onNext("?")sequenceThatFails.onError(TestError.test)sequenceThatFails.onNext("errored")  recoverySequence.onNext("?")
}
复制代码

打印: next(?) next(?) next(?) next(?) Error: test //切换到了recoverySequence next(?)

####retry
#####重复订阅onError的sequence,indefinitely(可无限订阅

example("retry") {let disposeBag = DisposeBag()var count = 1let sequenceThatErrors = Observable<String>.create { observer inobserver.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)
}
复制代码

打印: --- retry example --- ? ? ? Error encountered ? //retry从这里开始 ,demo只进行了一个次error ? ? ? ? ?

####retry(_:) 跟上面的一样,加入了参数(控制retry的次数)

example("retry maxAttemptCount") {let disposeBag = DisposeBag()var count = 1let sequenceThatErrors = Observable<String>.create { observer inobserver.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)
}
复制代码

打印: --- retry maxAttemptCount example --- ? ? ? Error encountered ? ? ? Error encountered ? ? ? Error encountered Unhandled error happened: test subscription called from:

RxSwift 小记 Error Handling Operators(catchError,retry)相关推荐

  1. 19 Error handling and Go go语言错误处理

    Error handling and Go go语言错误处理 12 July 2011 Introduction If you have written any Go code you have pr ...

  2. Swift2.0系列]Error Handling(项目应用篇)

    1.FileManager中的应用 倘若你只是想看FileManager中的 Error Handling是如何实现的,请找到3.删除文件以及4.获取文件信息.我分别为你提供了do-catch以及tr ...

  3. RxSwift处理Error事件

    如何处理RxSwift的Error事件 翻译自:How to handle errors in RxSwift 在最近这些日子里,MVVM在iOS开发中变得越来约受欢迎,RxSwfit也变得越来越流行 ...

  4. setjmp()、longjmp() Linux Exception Handling/Error Handling、no-local goto

    目录 1. 应用场景 2. Use Case Code Analysis 3. 和setjmp.longjmp有关的glibc and eglibc 2.5, 2.7, 2.13 - Buffer O ...

  5. Flex全局错误处理/Global Error Handling in AIR 2.0 and Flash 10.1

    Global Error Handling in AIR 2.0 and Flash 10.1 http://blogs.adobe.com/cantrell/archives/2009/10/glo ...

  6. 关于error handling的一些理解

    关于error handling的一些理解 前言 一.error handing 的常见处理方式 二 .从不同编程语言看错误 2.1 C语言的处理方式 2.2 CPP/JAVA的处理方式 2.3 GO ...

  7. Error Handling in ASP.NET Core

    前言  在程序中,经常需要处理比如 404,500 ,502等错误,如果直接返回错误的调用堆栈的具体信息,显然大部分的用户看到是一脸懵逼的,你应该需要给用户返回那些看得懂的界面.比如,"当前 ...

  8. Spring Boot 2.1.5(27)---WebFlux REST API 全局异常处理 Error Handling

    本文内容 为什么要全局异常处理? WebFlux REST 全局异常处理实战 小结 摘录:只有不断培养好习惯,同时不断打破坏习惯,我们的行为举止才能够自始至终都是正确的. 一.为什么要全局异常处理? ...

  9. swift3新路程(11)错误处理(Error Handling)

    我们在Java等其他语言之都知道有错误处理 基本上都是 try和catch配对的 那么在swift中同样也有 我们首先可以定义一下自己的错误类型如下面 enum MyErrors:Error {cas ...

最新文章

  1. 提供推荐——协作型过滤
  2. AttributeError: module ‘tensorflow‘ has no attribute ‘placeholder‘
  3. 如何使用Avira Rescue CD清洁感染的PC
  4. html文件怎么导出stl文件,各种3D建模软件导出STL文件的小技巧(一)
  5. mysql5.7安装教程centos_MySQL5.7版CentOS系统简易安装教程
  6. 数据预处理-数据变换-规范化
  7. c语言 指正判断字符串大小
  8. Bootstrap 响应式设计
  9. System类的概述和方法使用
  10. android AT指令获取SIM卡ICCID
  11. Java语言的发展史
  12. android 实现页面跳转代码,Android 实现页面跳转
  13. 直播带货系统开发,如何实现一个简单的直播平台
  14. Head First 系列图书资源-PDF网盘下载(更新中)
  15. 卡尔曼滤波室内温度估计
  16. 《 HarmonyOS实战—HarmonyOS(鸿蒙)开发初体验,华为如何引领物联网时代》
  17. 用生活中的照片做海报
  18. 汉诺塔c语言做法:汉诺塔(Hanoi)是必须用递归方法才能解决的经典问题。它来自于印度神话。上帝创造世界时作了三根金刚石柱子,在第一根柱子上从下往上按大小顺序摞着64片黄金圆盘
  19. EJB注解详细说明1
  20. node 压缩图片_推荐10个常用的图片处理小帮手(下)「值得收藏」

热门文章

  1. 年薪超 1400 万美元!苹果 CEO 库克去年薪酬大曝光!
  2. IT 往事录:苹果 Mac 之父,却在 Mac 问世前黯然退场
  3. 什么?拼命栽培员工,让他强大到足以离开
  4. 现代 JavaScript 函数库 usuallyjs 的安装和使用
  5. 发布一个持续集成的npm包并加上装逼小icon
  6. Mybatis底层原理学习(二):从源码角度分析一次查询操作过程
  7. Android自定义View,滑动,事件传递小结
  8. 算法笔记_183:历届试题 九宫重排(Java)
  9. Shell命令-文件及内容处理之more、less
  10. 实时通信技术之websocket