首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RxAlamofire: retryWhen加入订阅区块

RxAlamofire: retryWhen加入订阅区块
EN

Stack Overflow用户
提问于 2017-02-16 18:49:56
回答 1查看 711关注 0票数 1

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

代码语言:javascript
复制
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)

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-16 16:11:37

我试图重现您的场景,但以下代码不会在出现错误时触发订阅中的onNext闭包。我稍微重写了你的代码,我的例子总是出错。我使用的是RxSwift 4.0.0。

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42271750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档