当请求失败时,我需要修改请求的头部,但是当我在retryWhen中修改请求时,请求不会改变
下面是我的实现:
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中的请求?
我将非常感谢你的帮助。
发布于 2019-12-06 20:11:55
函数式反应式编程是一种函数式编程。你不必“改变请求”,你必须生成一个新的请求。我会更像这样写:
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)
}https://stackoverflow.com/questions/59188451
复制相似问题