Gibt es eine Möglichkeit, das zu tun Alamofire Anfragen mit Wiederholungen
Habe ich viele stellen im code, wo Alamofire Anfrage/Antwort behandelt werden.
Jede dieser Anfragen kann Versagen, weil einige intermittierende problem (die häufigste ist flockig-Netzwerk).
Ich würde gerne in der Lage sein, um erneut Anfragen 3 mal, bevor die Rettung.
Die einfache Methode wäre, um mit so etwas wie, dass
var errorCount = 0
func requestType1() {
let request = Alamofire.request(...).responseJSON { response in
if (isError(response) && errorCount < 3) {
errorCount += 1
request1()
}
if (isError(response)) {
handleError()
}
handleSuccess()
}
}
Allerdings gefällt mir dieser Ansatz EINE MENGE aus mehreren Gründen. Der offensichtlichste ist, dass ich die Notwendigkeit zur Umsetzung solcher code für jeden request-Typ (und ich habe so etwas wie 15).
Ich bin gespannt, ob es Weise ist, etwas zu tun (wo die Veränderungen sind minimal und nicht aufdringlich)
let request = Alamofire.request(..., **3**)
- Könnte man einen wrapper, der die Anforderung als eine Endung zu sperren? Also dann statt die Anfrage direkt, Sie haben die gleiche request-code in den block, sondern rufen Sie den wrapper? Macht es einfacher den code zu ändern.
- Carlos. Ich glaube, Sie haben Recht. Ich dies übersehen :). Wollen Sie schreiben, als Antwort?
- Sicher, gib mir ein bisschen Zeit, und ich werde tun, dass
- Sie erklären, wie Sie es bekam?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eines der bits der syntaktischen Zucker Sie erhalten mit Swift ist diese:
Wie diese:
Hinweis: der block befindet sich außerhalb der () der updateEvents Funktion, im Gegensatz zu denen, die man üblicherweise erwarten, dass es. Es funktioniert nur, wenn der block der Letzte, was in der Deklaration der Funktion.
Das heißt, wenn Sie geschehen, um einen block wie Ihre Alamofire Anfrage, können Sie effektiv wickeln Sie es mit Ihrem retry-Funktionalität. Eine etwas kompliziert Frage ist, die Sie anrufen möchten einen block in den block. Keine große Sache:
Und Sie verwenden es so:
Bedeutung alle Sie tun müssen ist, finden Sie Ihre Alamofire Anrufe und wickeln Sie Sie in { } und setzen retryWrapper() vor. Der retry-Logik selbst ist nur einmal da.
Alamofire 4.0 hat eine
RequestRetrier
Protokoll Sie verwenden können.https://github.com/Alamofire/Alamofire/blob/master/Documentation/Alamofire%204.0%20Migration%20Guide.md#request-retrier
Beispiel:
Ich habe das gleiche problem, und ich bekam die Anforderungen wiederholt werden, die mithilfe der
RequestRetrier
,should
Methode undrequest.retryCount
. So etwas wie es:Gut, was ich gemacht habe ist folgende, wenn die Anforderung fehlschlägt, sende ich eine fehlgeschlagene Benachrichtigung an, wer den Antrag gestellt hat. Dann ist es verantwortlich für die Wiederholung der Anforderung. Fand das viel einfacher.