2017-03-06 4 views
0

Wie kann ich mehrere lange API-Anrufe verhindern (z. B. wenn der Benutzer mehrmals auf die Schaltfläche klickt), ohne den Status zu speichern (z. B. Speichern der Eigenschaft "isLoading").Verhindern mehrerer API-Anrufe

+0

Vielleicht '' verwenden .take (1)? Schwer zu sagen, ohne mehr Kontext zu sehen. –

+1

Ja, aber ich muss mich erneut anmelden, nachdem ein Anruf getätigt wurde. – JaSHin

Antwort

3

Es fehlen Anforderungen hier, aber vorausgesetzt, Sie zusätzliche Anrufe vermeiden wollen, während man es ausgeführt wird, bis Anfrage Finish ist, Sie repeat(), können take(1) mit repeat() und optional auch retry(), take(1) wird Emission auf den ersten Klick begrenzen wird wieder neu abonnieren, wenn onComplete() - was bedeutet, die Netzwerkanforderung erfolgt, so dass Sie in der Lage sind, einzelne klicken wieder und führen Sie die Anforderung. Sie können für resubscribing mit Scheitern auch wiederholen() betrachten (das wird die Anfrage nicht wiederholen, werden aber wieder verfügbar Antrag stellen, wenn darauf geklickt)

getClicksEvents() 
    .take(1) 
    .flatMap(aVoid -> getRequestObservable()) 
    .repeat() 
    .retry() 
    .subscribe(result -> //do your thing); 
+0

Das ist es! Aber ich benutze RxSwift, wo "repeat" -Methode fehlt: X – JaSHin

+0

@JaSHin bist du dir sicher? https://github.com/ReactiveX/RxSwift/blob/master/RxSwift/Observables/Implementations/Repeat.swift Sie müssen nur Ihre Pakete aktualisieren. Ich weiß aber nichts über die Paketverwaltung in Swift. –

+2

gut wie @AluanHaddad sagte, dies ist wahrscheinlich in RxSwift, aber ich bin nicht vertraut mit RxSwift. (Sie setzen das RxJava-Tag :) also hier bin ich. – yosriz

Verwandte Themen