RxSwift 小记 Error Handling Operators(catchError,retry)
(*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)相关推荐
- 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 ...
- Swift2.0系列]Error Handling(项目应用篇)
1.FileManager中的应用 倘若你只是想看FileManager中的 Error Handling是如何实现的,请找到3.删除文件以及4.获取文件信息.我分别为你提供了do-catch以及tr ...
- RxSwift处理Error事件
如何处理RxSwift的Error事件 翻译自:How to handle errors in RxSwift 在最近这些日子里,MVVM在iOS开发中变得越来约受欢迎,RxSwfit也变得越来越流行 ...
- 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 ...
- 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 ...
- 关于error handling的一些理解
关于error handling的一些理解 前言 一.error handing 的常见处理方式 二 .从不同编程语言看错误 2.1 C语言的处理方式 2.2 CPP/JAVA的处理方式 2.3 GO ...
- Error Handling in ASP.NET Core
前言 在程序中,经常需要处理比如 404,500 ,502等错误,如果直接返回错误的调用堆栈的具体信息,显然大部分的用户看到是一脸懵逼的,你应该需要给用户返回那些看得懂的界面.比如,"当前 ...
- Spring Boot 2.1.5(27)---WebFlux REST API 全局异常处理 Error Handling
本文内容 为什么要全局异常处理? WebFlux REST 全局异常处理实战 小结 摘录:只有不断培养好习惯,同时不断打破坏习惯,我们的行为举止才能够自始至终都是正确的. 一.为什么要全局异常处理? ...
- swift3新路程(11)错误处理(Error Handling)
我们在Java等其他语言之都知道有错误处理 基本上都是 try和catch配对的 那么在swift中同样也有 我们首先可以定义一下自己的错误类型如下面 enum MyErrors:Error {cas ...
最新文章
- 提供推荐——协作型过滤
- AttributeError: module ‘tensorflow‘ has no attribute ‘placeholder‘
- 如何使用Avira Rescue CD清洁感染的PC
- html文件怎么导出stl文件,各种3D建模软件导出STL文件的小技巧(一)
- mysql5.7安装教程centos_MySQL5.7版CentOS系统简易安装教程
- 数据预处理-数据变换-规范化
- c语言 指正判断字符串大小
- Bootstrap 响应式设计
- System类的概述和方法使用
- android AT指令获取SIM卡ICCID
- Java语言的发展史
- android 实现页面跳转代码,Android 实现页面跳转
- 直播带货系统开发,如何实现一个简单的直播平台
- Head First 系列图书资源-PDF网盘下载(更新中)
- 卡尔曼滤波室内温度估计
- 《 HarmonyOS实战—HarmonyOS(鸿蒙)开发初体验,华为如何引领物联网时代》
- 用生活中的照片做海报
- 汉诺塔c语言做法:汉诺塔(Hanoi)是必须用递归方法才能解决的经典问题。它来自于印度神话。上帝创造世界时作了三根金刚石柱子,在第一根柱子上从下往上按大小顺序摞着64片黄金圆盘
- EJB注解详细说明1
- node 压缩图片_推荐10个常用的图片处理小帮手(下)「值得收藏」