In einer Chat-App, an der ich gerade arbeite, muss ich die Telefonnummern aus den Kontakten an eine API senden und die Nummern abrufen, die sich bereits bei der App registriert haben.Eine Schließung rekursiv aufrufen
Da Kontaktlisten sehr lang sein können, plane ich, die Telefonnummern in Chargen zu senden (20 pro Anfrage). Und aktualisieren Sie die Benutzeroberfläche entsprechend jeder zurückgegebenen Antwort.
private(set) var registeredContacts: [RegContact] = []
let phoneNumbersInBatches: [[String]] = [[]]
for batch in phoneNumbersInBatches {
ApiClient.sharedInstance.getRegisteredContacts(from: batch) { contacts, error in
// Saving to database
// Update the UI
// ...
self.registeredContacts += contacts
}
}
Ich mag jede Partie nacheinander senden. Mit anderen Worten, hier ist, wie ich den Prozess gehen möchte.
Senden Batch -> erhalten Antwort -> Aktualisieren der UI (wenn Benutzer registriert sind) -> nächste Charge senden -> ...
Aber mit getRegisteredContacts
ist ein Verschluss, der for
Schleife sendet einfach alle Anfragen nacheinander aus, ohne auf den Abschluss der vorherigen Anfrage zu warten.
Wie kann ich jede weitere Anfrage warten und absetzen, nachdem die vorherige Anfrage abgeschlossen wurde?
Synchron ist selten eine gute Idee. Sie sollten sich NSOperationQueue ansehen. – Paulw11