首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RXSwift:`retryWhen`请求失败,修改URLRequest

RXSwift:`retryWhen`请求失败,修改URLRequest
EN

Stack Overflow用户
提问于 2019-12-05 12:52:14
回答 1查看 117关注 0票数 0

当请求失败时,我需要修改请求的头部,但是当我在retryWhen中修改请求时,请求不会改变

下面是我的实现:

代码语言:javascript
复制
func makeRequest(serviceRequest: URLRequest) {
    let maxRetry = 2
    var localRequest = serviceRequest
    request(request: localRequest).retryWhen { errors in
        return errors.enumerated().flatMap { (arg) -> Observable<Int64> in
            localRequest.setValue("someValue", forHTTPHeaderField: "someKey")

            let (index, error) = arg
            return index <= maxRetry ? Observable<Int64>.timer(DispatchTimeInterval.microseconds(4),
                                                               scheduler: MainScheduler.instance) : Observable.error(error)
        }
    }.subscribe(onNext:{ result in
        print(result)

        }).disposed(by: disposeBag)
}

如果我在set headers someKey之后输入po localRequest,它将显示我所做的更改,但是如果我在请求函数中输入po request,则请求保持不变,没有任何更改。你们中有谁知道我可以做些什么来改变retryWhen中的请求?

我将非常感谢你的帮助。

EN

回答 1

Stack Overflow用户

发布于 2019-12-06 20:11:55

函数式反应式编程是一种函数式编程。你不必“改变请求”,你必须生成一个新的请求。我会更像这样写:

代码语言:javascript
复制
func makeRequest(buildRequest: @escaping (String) -> URLRequest) {
    Observable.deferred {
        request(request: buildRequest(token))
    }
    .retryWhen { (error) in
        error.enumerated().flatMap { (index, error) -> Observable<Void> in
            token = "some value"
            return index <= 2 ?
                Observable.just(()).delay(.microseconds(4), scheduler: MainScheduler.instance) :
                Observable.error(error)
        }
    }
    .subscribe(onNext:{ result in
        print(result)
    })
    .disposed(by: disposeBag)
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59188451

复制
相关文章

相似问题

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