Ich habe ein paar asynchrone Netzwerkaufgaben, die ich auf meiner App ausführen muss. Angenommen, ich benötige 3 Ressourcen, die ich von einem Server abrufen muss, rufen Sie sie unter A
, B
und C
an. Nehmen wir an, ich muss die Ressource A
zuerst holen, bevor ich entweder B
oder C
geholt habe. Manchmal möchte ich zuerst B
holen, andere Male C
zuerst. RechtsSwift führen asynchrone Aufgaben in der Reihenfolge
jetzt, ich habe nur eine langkettige Verschluss wie so:
func fetchA() {
AFNetworking.get(completionHandler: {
self.fetchB()
self.fetchC()
})
}
Das ist für jetzt funktioniert, aber die offensichtliche Einschränkung ist, ich habe hart codiert die Reihenfolge der Ausführung in den Abschluss-Handler fetchA
. Nun, sage ich möchte nur fetchC
nach fetchB
hat in diesem Abschluss-Handler beendet, würde ich meine Implementierung gehen ändern für fetchB
...
Im Wesentlichen würde Ich mag wissen, ob es irgendeine magische Art und Weise zu tun ist so etwas wie:
let orderedAsync = [fetchA, fetchB, fetchC]
orderedAsync.executeInOrder()
wo fetchA
, fetchB
und fetchC
sind alle Asynchron-Funktionen, aber fetchB
wird nicht ausgeführt, bis fetchA
usw. beendet ist. Vielen Dank!
Nicht verwandt, aber Sie könnten Alamofire anstelle von AFNetworking verwenden. Es ist vom selben Autor, aber eine schnelle Lösung. Aber Sie müssen noch etwas tun, um asynchrone Aufgaben zu bearbeiten, entweder PromiseKit, eine asynchrone "Operation" - Unterklasse zum Umbrechen der Anfragen oder Ähnliches. – Rob
Wenn Sie innerhalb von AFNetworking geblieben sind, habe ich einen kleinen "NSOperation" -Wrapper dafür gemacht: https://github.com/robertmryan/AFHTTPSessionOperation – Rob