- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试实现最大重试次数的 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/
我正在编写逻辑,用于每 t 秒检查一个对象的状态,直到它完成。我决定使用 retryWhen 运算符。 getObjectStatus(someObject: someObjectInstance)
我正在关注 this tutorial然后添加这一行: .retryWhen(errors -> errors.flatMap(error -> Observable.timer(30, TimeUn
我一直在使用 retryWhen() 方法,我注意到如果你在 retryWhen() 中使用 filter() 并且如果 filter() 失败,则不会执行回调,甚至 onCompleted() 也不
我对 retryWhen 有疑问。 我正在做一个条形码扫描应用程序,要求是当状态代码为500时,我们将重试请求,如果为400,则将该条形码推送到数组中(列出错误400的条形码)。 我需要按照上面的要求
我正在通过重试实现数据库更新方法。遵循 retryWhen() 运算符的通用模式,如下所述:Using Rx Java retryWhen() .. ..但是我的重试逻辑从未执行过。我正在调试它,可以
看,我在 StackBlitz 上创建了问题 https://stackblitz.com/edit/rxjs-nndpag 我不知道如何正确使用 retryWhen 运算符。我希望它重新订阅我的 p
我正在尝试使用 java Rx(版本 1)重试。 我想要执行 retryWhen 而不是简单的 retry() 因为我希望在达到限制时返回具有特定值的可观察值,而不是仅仅抛出异常. 所以,检查这个 h
我使用 RXJava 调用一个昂贵的递归函数。大多数时候它运行得非常快,但有时它会生成太长的 take 方式 如果线程仍在运行,有没有办法在 5 秒后使用 retryWhen()? observab
我正在学习如何在 RxJava2 中进行数据轮询 到目前为止,这是我的代码。 private io.reactivex.Single getMyTask() { return io.
当对我的外部服务之一的外部 http 请求失败时,我正在使用 retryWhen。问题是我正在使用 RxHelper.toObservable(httpClient.request(method,
我有这样的东西: service.getStuff() .map(...) .observeOn(AndroidSchedule
我是 rxJava 的新手,这可能是一个非常愚蠢的问题,但我无法弄清楚如何在重试时找到异常类型。我想在特定异常(例如 Io 异常)上重试,但在其他异常上重试我想将异常传递到链中。 public Obs
我在 Android 应用程序中使用 Retrofit 和 RxJava 进行通信,并且必须处理解析来自看似正常的 HTTP 响应(状态 200 代码)的响应时的错误。 我还实现了一种使用 retry
我有一个应用程序需要 session (cookie) 来处理网络调用。我正在使用 Retrofit+RxJava。但是, session 可能会过期(Retrofit 错误,状态为 401 Unau
我一直在尝试在 RxSwift 上测试 retryWhen 运算符,但遇到了 Reentrancy Anomaly 问题,这是代码: Observable.create { observer in
我正在玩 RxJava retryWhen运算符(operator)。在互联网上很少找到关于它的信息,唯一值得一提的是 this .这也不足以探索我想了解的各种用例。我还加入了异步执行并通过回退重试,
我想以增加的时间间隔触发 retrywhen(), socketResponse.retryWhen(attempts => { return attempts.zip(Observab
我正在尝试进行 API 调用(使用 angular4),它会在失败时使用 retryWhen 重试。我希望它延迟 500 毫秒并重试。这可以通过以下代码实现: loadSomething(): Obs
如何在 retryWhen 中设置延迟? import 'rxjs/add/operator/retry'; import 'rxjs/add/operator/retrywhen'; ... con
我正在创建一个 Angular Http 重试拦截器。当我重试 1 次时,我的代码如下所示: return next.handle(req).pipe( retryWhen((error)
我是一名优秀的程序员,十分优秀!