Verketten Sie mehrere Alamofire-Anfragen
Ich bin auf der Suche nach guten Muster, mit denen ich Kette können mehrere HTTP-requests. Ich will Swift, und vorzugsweise Alamofire.
Sagen, zum Beispiel, ich möchte Folgendes tun:
- Eine PUT-Anfrage
- Sie eine GET-Anforderung
- Reload-Tabelle mit Daten
Es scheint, dass das Konzept der verspricht vielleicht eine gute Passform für diese. PromiseKit könnte eine gute option sein, wenn ich tun könnte etwas wie diese:
NSURLConnection.promise(
Alamofire.request(
Router.Put(url: "http://httbin.org/put")
)
).then { (request, response, data, error) in
Alamofire.request(
Router.Get(url: "http://httbin.org/get")
)
}.then { (request, response, data, error) in
//Process data
}.then { () -> () in
//Reload table
}
aber das ist nicht möglich oder zu mindestens bin ich mir dessen nicht bewusst.
Wie kann ich diese Funktionalität erreichen, ohne Verschachtelung mehrerer Methoden?
Ich bin neu in iOS also vielleicht gibt es etwas grundlegenderes, das fehlt mir. Was ich getan habe, in anderen frameworks wie Android ist, um diese Vorgänge auszuführen, die in einem hintergrund-Prozess und stellen die Anfragen synchron. Aber Alamofire ist inhärent asynchronso dass Muster nicht eine option.
InformationsquelleAutor der Frage jlhonora | 2015-02-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verpackung andere asynchrone Sachen verspricht, funktioniert wie folgt:
Edit: Heute Einsatz: https://github.com/PromiseKit/Alamofire-
InformationsquelleAutor der Antwort mxcl
Schrieb ich eine Klasse mit einer Kette von verlangen.
Erstellte ich eine Klasse
RequestChain
wich nimmtAlamofire.Request
als parameterUnd ich benutze es so
Wichtig ist, dass Sie sagen, die Manager nicht ausführen, die Anfrage sofort
Hoffe, es wird helfen, jemand anderes zu
Swift 3.0 Update
Anwendungsbeispiel Swift 3
InformationsquelleAutor der Antwort Eike
Haben Sie mehrere Möglichkeiten.
Option 1 - Schachteln Anrufe
Dies ist definitiv der Ansatz, den ich empfehlen würde. Verschachtelung ein Anruf in ein anderes ist sehr einfach und ist ziemlich einfach zu Folgen. Außerdem hält die Dinge einfach.
Option 2 - Splitting in Mehrere Methoden
Diese option ist weniger dicht und teilt die Dinge in kleinere Stücke. Je nach Ihren Bedürfnissen und der Komplexität der Antwort Parsen, kann dies ein lesenswerter Ansatz.
Option 3 - PromiseKit und Alamofire
Alamofire verarbeiten kann, ist das ziemlich einfach, ohne ziehen zu müssen in PromiseKit. Wenn Sie wirklich wollen, diesen Weg zu gehen, können Sie den Ansatz zur Verfügung gestellt von @mxcl.
InformationsquelleAutor der Antwort cnoon
Hier ist ein weiterer Weg, dies zu tun (Swift 3, Alamofire 4.x) mit einem DispatchGroup
InformationsquelleAutor der Antwort Etienne Beaule
Details
Vollständige Probe
Ergebnis
InformationsquelleAutor der Antwort Vasily Bodnarchuk
Nennen sich selbst unendlich und DEFINIEREN END-ZUSTAND.
urlring für API-link und Wörterbuch für json
Können WIR konstruieren die queue-Modell oder delegieren
InformationsquelleAutor der Antwort Raju yourPepe