         
         hud.show(timeout: ZLPhotoConfiguration.default().timeout)
         
+        let callback = { [weak self] (sucImages: [UIImage], sucAssets: [PHAsset], errorAssets: [PHAsset], errorIndexs: [Int]) in
+            hud.hide()
+            
+            func call() {
+                self?.selectImageBlock?(sucImages, sucAssets, self?.isSelectOriginal ?? false)
+                if !errorAssets.isEmpty {
+                    self?.selectImageRequestErrorBlock?(errorAssets, errorIndexs)
+                }
+            }
+            
+            if let vc = viewController {
+                self?.isHidden = true
+                self?.animate = false
+                vc.dismiss(animated: true) {
+                    call()
+                    self?.hide()
+                }
+            } else {
+                self?.hide(completion: {
+                    call()
+                })
+            }
+            
+            self?.arrSelectedModels.removeAll()
+            self?.arrDataSources.removeAll()
+        }
+        
         guard ZLPhotoConfiguration.default().shouldAnialysisAsset else {
-            hud.hide()
-            self.selectImageBlock?([], self.arrSelectedModels.map { $0.asset }, self.isSelectOriginal)
-            self.arrSelectedModels.removeAll()
-            self.hide()
-            viewController?.dismiss(animated: true, completion: nil)
+            callback([], self.arrSelectedModels.map { $0.asset }, [], [])
             return
         }
         

            }) { (_) in
                self.isHidden = true
                self.removeFromSuperview()
            }
        } else {
            self.isHidden = true
            self.removeFromSuperview()
        }
        
        if let temp = self.senderTabBarIsHidden {

        var sucCount = 0
        let totalCount = self.arrSelectedModels.count
        for (i, m) in self.arrSelectedModels.enumerated() {
            let operation = ZLFetchImageOperation(model: m, isOriginal: self.isSelectOriginal) { (image, asset) in
                guard !timeout else { return }
                
                sucCount += 1
