Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

508
Vistas
¿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
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda