当请求失败时,我需要修改请求的标头,但是当我在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) }
如果我在设置标题
po localRequest
之后显示someKey
,它将显示我的更改,但是如果请求函数中的我po request
,则请求保持不变,没有任何更改。谁都知道我该怎么做才能更改retryWhen
中的请求?非常感谢您的帮助。
当请求失败时,我需要修改请求的标头,但是当我在retry中修改请求时,请求不会改变。这是我的实现:func makeRequest(serviceRequest:...
Functional Reactive Programming是一种功能范式。您不必“更改请求”,而必须生成一个新请求。我会这样写:
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)
}