我尝试使用max retries实现alamofire调用。代码如下:
load
不幸的是,在重试时,我进入了订阅中的onNext块 - 我不想到达那里直到我得到结果。 (按预期超出最大重试次数后,onError会出错)。请有人帮忙吗?
答案 0 :(得分:0)
我尝试重现您的方案,但以下代码在发生错误时不会触发订阅中的onNext闭包。 我稍微重写了你的代码,我的例子总是出错。我正在使用RxSwift 4.0.0。
let count = 2
enum MyError: Error {
case crash
}
_ = Observable<Int>.error(MyError.crash)
.debug("prior")
.retryWhen { errors in
return errors.enumerated().flatMap { (index, error) -> Observable<Void> in
guard index < count - 1 else { return .error(error) }
print("Error: delay server call retry by \(index + 1) second(s)")
return Observable<Void>.just(()).delay(RxTimeInterval(index + 1), scheduler: MainScheduler.instance)
}
}
.debug("after")
.subscribe(onNext: { element in
print("got next element: \(element)")
})
这会产生以下输出。
2018-03-16 09:05:16.921: after -> subscribed
2018-03-16 09:05:16.924: prior -> subscribed
2018-03-16 09:05:16.924: prior -> Event error(blok)
Error: delay server call retry by 1 second(s)
2018-03-16 09:05:16.925: prior -> isDisposed
2018-03-16 09:05:17.926: prior -> subscribed
2018-03-16 09:05:17.926: prior -> Event error(blok)
2018-03-16 09:05:17.927: after -> Event error(blok)
2018-03-16 09:05:17.928: after -> isDisposed
2018-03-16 09:05:17.928: prior -> isDisposed