注意:使用本例中的代码首先应该导入头文件,代码如下:
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