gpt4 book ai didi

ios - RxAlamofire: retryWhen 掉进订阅 block

转载 作者:行者123 更新时间:2023-11-28 08:17:09 25 4
gpt4 key购买 nike

我正在尝试实现最大重试次数的 alamofire 调用。代码如下:

RxAlamofire.request(.post, URL, parameters: parameters, encoding: JSONEncoding.default)
.observeOn(MainScheduler.instance)
.retryWhen { (errors: Observable<Error>) in
return errors.flatMapWithIndex { (e, a) -> Observable<Int64> in
if a >= self.RETRY_COUNT - 1 {
return Observable.error(e)
}
print("Error: delay server call retry by \(a+1) second(s)")
return Observable<Int64>.timer(RxTimeInterval(a+1), scheduler: MainScheduler.instance)
}
}
.subscribe(
onNext: {
(result) in

print("I get here when retrying...")
},
onError: { (error) in
print(error)
}
)
.addDisposableTo(self.disposeBag)

不幸的是,在重试时,我进入了订阅的 onNext block - 在我得到结果之前我不想到达那里。 (在超过预期的最大重试次数后,onError 给出错误)。有人可以帮忙吗?

最佳答案

我已尝试重现您的场景,但以下代码不会在发生错误时触发订阅中的 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: 在 -> 订阅之后
2018-03-16 09:05:16.924: 之前 -> 已订阅
2018-03-16 09:05:16.924:之前 -> 事件错误( block )
错误:延迟服务器调用重试 1 秒
2018-03-16 09:05:16.925: 之前 -> isDisposed
2018-03-16 09:05:17.926: 之前 -> 已订阅
2018-03-16 09:05:17.926:之前 -> 事件错误( block )
2018-03-16 09:05:17.927: 之后 -> 事件错误( block )
2018-03-16 09:05:17.928: 在 -> isDisposed 之后
2018-03-16 09:05:17.928:之前 -> isDisposed

关于ios - RxAlamofire: retryWhen 掉进订阅 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42271750/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com