retry
ReactiveX:
if a source Observable emits an error, resubscribe to it in the hopes that it will complete without error
retry
操作符可以无限次的尝试,除非你写了使它结束的判断,和递归类似。
enum RxError: Error {
case error
}
var count = 0
testRetry()
.retry()
.subscribe(onNext: { element in
print("element:", element)
}, onError:{ error in
print("error:", error)
})
.disposed(by: bag)
func testRetry() -> Observable<Bool> {
return Observable<Bool>.create { ov in
if self.count <= 3 {
print("尝试次数:", self.count+1)
ov.onError(RxError.error)
self.count += 1
} else {
ov.onNext(true)
ov.onCompleted()
}
return Disposables.create()
}
}
输出:
尝试次数: 1
尝试次数: 2
尝试次数: 3
尝试次数: 4
element: true
retry(_ maxAttemptCount:)
可以设置重试次数
testRetry()
.retry(5)
.subscribe(onNext: { element in
print("element:", element)
}, onError:{ error in
print("error:", error)
})
.disposed(by: bag)
func testRetry() -> Observable<Bool> {
return Observable<Bool>.create { ov in
if self.count == 0 {
self.counter += 1
print("尝试次数:", self.counter)
ov.onError(RxError.error)
} else {
ov.onNext(true)
ov.onCompleted()
}
return Disposables.create()
}
}
输出:
尝试次数: 1
尝试次数: 2
尝试次数: 3
尝试次数: 4
尝试次数: 5
error: error
我们尝试了5次,但是每次每次错误,我们并没有把count的值进行增加,所以尝试错了5次之后,就会走error事件。