जब कोई उपयोगकर्ता मेरे ऐप में एक नया समूह बनाता है तो मुझे डेटाबेस के साथ-साथ अन्य जानकारी को आमंत्रित करना होगा। जब सभी जानकारी सफलतापूर्वक भेजी जाती है तो ट्रैक रखने के लिए मैंने डिस्पैच समूह का उपयोग शुरू कर दिया है ताकि मैं दृश्य को खारिज कर सकूं।नेस्टेड डिस्पैच समूह स्विफ्ट
मैं आमंत्रण के लिए एक प्रेषण समूह और सभी डेटा के लिए एक अन्य प्रेषण समूह का उपयोग करने की कोशिश कर रहा हूं। यहाँ मैं क्या है:
// Push new data to db
func createGroup(onSccess completion:@escaping() -> Void) {
let inviteDispatchGroup = DispatchGroup()
let dataDispatchGroup = DispatchGroup()
let uid = FIRAuth.auth()?.currentUser?.uid
let name = String(uid!) + "_" + nameTextField.text!
// push invites
dataDispatchGroup.enter()
for invite in invites {
inviteDispatchGroup.enter()
let ref = FIRDatabase.database().reference().child("users").child(invite.id).child("invites")
ref.updateChildValues([name: nameTextField.text!]) { (error, ref) -> Void in
inviteDispatchGroup.leave()
}
}
inviteDispatchGroup.notify(queue: DispatchQueue.main, execute: {
dataDispatchGroup.leave()
})
// store picture
dataDispatchGroup.enter()
let storageRef = FIRStorage.storage().reference().child("profile_images").child("\(name).png")
if let uploadData = UIImagePNGRepresentation(profImage.resizeImage(targetSize: CGSize(width: 500, height: Int(500*(profImage.size.height/profImage.size.width))))) {
storageRef.put(uploadData, metadata: nil, completion: { (metadata, error) in
dataDispatchGroup.leave()
})
}
// store pet info
dataDispatchGroup.enter()
let petRef = FIRDatabase.database().reference().child("pets").child(name)
petRef.setValue(["mod":uid!, "name":nameTextField.text!, "members":[uid!]]) { (error, ref) -> Void in
dataDispatchGroup.leave()
}
// store user info
dataDispatchGroup.enter()
let userRef = FIRDatabase.database().reference().child("users").child(uid!).child("pets")
userRef.updateChildValues([name: true]) { (error, ref) -> Void in
dataDispatchGroup.leave()
}
dataDispatchGroup.notify(queue: DispatchQueue.main, execute: {
completion()
})
}
आप देख सकते हैं, जब invitesDipatchGroup
पूरा हो गया है यह dataDispatchGroup
इसी रहा है छोड़ दिया है।
मैं डिस्पैच समूहों के लिए नया हूं और यह सुनना चाहता हूं कि यह इस तरह के कार्य के साथ लेने का सही तरीका है या नहीं।