Explorar el Código

Get data in on processing queue

Rob Jonson hace 4 años
padre
commit
7e7aa77ca3
Se han modificado 1 ficheros con 23 adiciones y 21 borrados
  1. 23 21
      Sources/General/KingfisherManager.swift

+ 23 - 21
Sources/General/KingfisherManager.swift

@@ -344,33 +344,35 @@ public class KingfisherManager {
         completionHandler: ((Result<ImageLoadingResult, KingfisherError>) -> Void)?)
     {
         guard let  completionHandler = completionHandler else { return }
-        provider.data { result in
-            switch result {
-            case .success(let data):
-                (options.processingQueue ?? self.processingQueue).execute {
-                    let processor = options.processor
-                    let processingItem = ImageProcessItem.data(data)
-                    guard let image = processor.process(item: processingItem, options: options) else {
+        (options.processingQueue ?? self.processingQueue).execute {
+            provider.data { result in
+                switch result {
+                case .success(let data):
+                    (options.processingQueue ?? self.processingQueue).execute {
+                        let processor = options.processor
+                        let processingItem = ImageProcessItem.data(data)
+                        guard let image = processor.process(item: processingItem, options: options) else {
+                            options.callbackQueue.execute {
+                                let error = KingfisherError.processorError(
+                                    reason: .processingFailed(processor: processor, item: processingItem))
+                                completionHandler(.failure(error))
+                            }
+                            return
+                        }
+                        
                         options.callbackQueue.execute {
-                            let error = KingfisherError.processorError(
-                                reason: .processingFailed(processor: processor, item: processingItem))
-                            completionHandler(.failure(error))
+                            let result = ImageLoadingResult(image: image, url: nil, originalData: data)
+                            completionHandler(.success(result))
                         }
-                        return
                     }
-
+                case .failure(let error):
                     options.callbackQueue.execute {
-                        let result = ImageLoadingResult(image: image, url: nil, originalData: data)
-                        completionHandler(.success(result))
+                        let error = KingfisherError.imageSettingError(
+                            reason: .dataProviderError(provider: provider, error: error))
+                        completionHandler(.failure(error))
                     }
+                    
                 }
-            case .failure(let error):
-                options.callbackQueue.execute {
-                    let error = KingfisherError.imageSettingError(
-                        reason: .dataProviderError(provider: provider, error: error))
-                    completionHandler(.failure(error))
-                }
-
             }
         }
     }