- 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/
当 RxAlamofire 调用发生错误时,我需要响应正文。我见过this hack但我想知道是否有更清洁的方法。 受此启发,我创建了这个 RxAlamofire fork有一个类似的黑客。有了它,错
下面是RxAlamofire网络请求的示例代码。我的问题是,每当 View Controller 被关闭时,我都想取消这个请求。 我试图将此请求分配给一个全局变量,但是 requestJSON方法返回
我正在使用 RxAlamofire 下载文件。我有这样的东西: let downloadResult = download(request, to: destination) 不幸的是,downloa
我有一个简单的服务器请求,我想过滤并生成一个新的 Observable 以使用 JSON 数据验证请求。 我必须这样做,因为即使我的请求无效,我的服务器响应也会返回状态代码 200。但我可以在我的 J
我有一个应该返回 Observable 的函数。当我第一次调用该函数时,一切都很顺利,我收到了预期的结果,但第二次我想使用不同的参数发出相同的请求时,该函数会自动返回与之前相同的响应,但它不会完全激发
这是我的非响应式代码,运行良好。 函数 getLatestHtml2(){ Alamofire.request("https://www.everfest.com/fest300").response
func showImageForUrl(url: String) -> Observable> { let result = RxAlamofire .requestJSON
我创建了一个简单的项目来检查像 RxAlamofire 和 AlamofireObjectMapper 这样的库。我有一个简单的 ApiService,其中有一个端点是 PHP 脚本,它可以正常工作并
我想使用 RxAlamofire 取消之前的请求。 但是我不知道在哪里调用取消函数。 我有一个搜索栏,我在函数“textdidchange”中调用 API。 所以,我想取消之前的请求,用新的参数调用A
我正在尝试找出 API 调用中的数据来自何处。具体来说,我想知道req.user在哪里据我所知,没有参数被传递到 API 调用中。 这是服务器端代码(JS): let APIHandler = (re
我正在尝试实现最大重试次数的 alamofire 调用。代码如下: RxAlamofire.request(.post, URL, parameters: parameters, encoding:
我正在尝试使用 RxAlamofire 来包装网络请求结果。 我的目标是触发请求、处理 JSON 响应并创建包含网络操作成功或发生任何错误的 Observable。 在其他地方,我可以调用创建 Obs
我想使用 RxAlamofire 进行调用,它提供了函数 requestJson 需要两个参数 type get or post and url 但是没有参数来传递 post json body 如何
我正在 web 抓取 用户必须登录的特定网站。注销用户很简单,但注销后网站要求用户 “关闭浏览器”。如果用户只是关闭选项卡然后重新进入网站,他们将被带回登录帐户。有没有办法以某种方式模拟在 Swift
我想使用 RxAlamofire 进行 post 调用,但找不到任何方法可以做到这一点 尝试使用 requestJSON 方法但没有参数传递 post json RxAlamofire.reques
实际上我是 iOS 的新手,现在我的任务是使用 Rxalamofire 发送 URL 请求。我完全不知道 Rxalamofire。以前我只使用 alamofire。以前我只使用alamofire。现在
我是一名优秀的程序员,十分优秀!