Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

507
Views
¿Cómo puedo volver a intentar solicitudes fallidas usando alamofire?

Adjunto solicitudes fallidas al administrador de colas (contiene una matriz) en caso de que no haya conexión

Estoy presentando una ventana emergente personalizada con un botón de reintento. Cuando se presiona el botón de reintento, quiero volver a intentar las solicitudes que no se pueden enviar en el estado sin conexión. Puede haber más de una solicitud.

Cuando pruebo el método retryRequest de la clase de Session de Alamofire, el estado de la tarea de la solicitud permanece en el estado inicializado o finalizado, pero debe reanudarse para enviar la solicitud correctamente, ¿cómo puedo resolver esta situación?

InterceptorInterface.swift

 public func didGetNoInternetConnection() { let viewModel = AppPopupViewModel(title: L10n.AppPopUp.areYouOffline, description: L10n.AppPopUp.checkInternetConnection, image: Images.noInternetConnection.image, firstButtonTitle: L10n.General.tryAgain, secondButtonTitle: nil, firstButtonAction: { [weak self] in guard let self = self else { return } DispatchQueue.main.async { self.retry() } }, secondButtonAction: nil, dismissCompletion: nil, dimColor: Colors.appGray.color.withAlphaComponent(0.8), showCloseButton: true, customView: nil) DispatchQueue.main.async { AppPopupManager.show(with: viewModel, completion: nil) } } private func retry() { guard let head = NetworkRequestStorage.shared.head else { return } let request = head.request let session = head.session session.retryRequest(request, withDelay: nil) }

APIInterceptor.swift

 final class APIInterceptor: Alamofire.RequestInterceptor { private let configure: NetworkConfigurable private var lock = NSLock() // MARK: - Initilize internal init(configure: NetworkConfigurable) { self.configure = configure } // MARK: - Request Interceptor Method internal func adapt(_ urlRequest: URLRequest, for session: Session, completion: @escaping (Result<URLRequest, Error>) -> Void) { lock.lock() defer { lock.unlock() } var urlRequest = urlRequest if let token = self.configure.accessToken { /// Set the Authorization header value using the access token. urlRequest.setValue("Bearer " + token, forHTTPHeaderField: "Authorization") } // Set Accept-Language header value using language code urlRequest.setValue(configure.languageCode, forHTTPHeaderField: "Accept-Language") // Arrange Request logs for develope and staging environment if let reachability = NetworkReachabilityManager(), !reachability.isReachable { configure.didGetNoInternetConnection() completion(.failure(APIClientError.networkError)) } completion(.success(urlRequest)) } // MARK: - Error Retry Method internal func retry(_ request: Request, for session: Session, dueTo error: Error, completion: @escaping (RetryResult) -> Void) { // Arrange Error logs for develope and staging environment if let aError = error as? APIClientError, aError.statusCode == 400 { // no connection state NetworkRequestStorage.shared.enqueue(request: request, session: session) completion(.doNotRetryWithError(error)) } else { request.retryCount <= configure.retryCount ? completion(.retry) : completion(.doNotRetryWithError(error)) } } }

Si la solicitud tiene éxito o no hay ningún error de conexión, la elimino de la clase NetworkRequestStoroge .

over 4 years ago · Santiago Trujillo
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!