尝试使用结合复制 Alamofire 重试方法拦截器

问题描述

我会用 combine 复制 Alamofire 拦截器的 Alamofire 重试功能。这个函数应该以这种方式工作:

func retry(_ request: Request,for session: Session,dueto error: Error,completion: @escaping (RetryResult) -> Void) {
        //Async code
        completion(.retry)
    }

例如,如果出现错误,我应该刷新此 func 中的令牌,然后调用闭包。在我的网络管理器中,我应该检查关闭并重试呼叫。 我试图用Combine 复制这个逻辑。我没有关闭,而是Future :

open func retry(_ response: URLResponse,for session: URLSession,dueto error: Error) -> AnyPublisher<RetryResultStruct,Error> {
            
            testRefresh().flatMap { (success) in
            return
                Deferred {
                    Future<RetryResultStruct,Error> { promise in
                        if success {
                            promise(.success(RetryResultStruct(retryResult: .doNotRetry)))
                        } else {
                            promise(.failure(error))
                        }
                    }
                }
            }
            .erasetoAnyPublisher()
        }

我不明白如何组合在一起。我的 Combine 经理以这种方式工作:

func send(request: Request) -> AnyPublisher<Data,WebServiceError> {
        let finalRequest = self.interceptor?.adapt(request.urlRequest)
        self.interceptor?.logger.logRequest(urlRequest: finalRequest!)
        
         return (self.session!.dataTaskPublisher(for: finalRequest!)
                    .tryMap { data,response -> Data in
                        guard let httpResponse = response as? HTTPURLResponse else { throw WebServiceError.nonHTTPResponse }
                                                                        
                        let statusCode = httpResponse.statusCode
                        guard (200..<300).contains(statusCode) else { throw WebServiceError.incorrectStatusCode(statusCode: statusCode,response: response) }
                        return data
                    }
            .mapError{ (error) -> WebServiceError in
                return error.mapToWebServiceError()
            })
            .erasetoAnyPublisher()
    }

我编写了传递给我的请求管理器的拦截器。但我不明白如何组合在一起。 如何建议实现这一目标?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)