2017-03-06 72 views
0

如何在不保存狀態(例如,將狀態保存爲「isLoading」屬性)的情況下防止多個長時間api調用(例如用戶多次點擊按鈕)。防止多個API調用

+0

也許使用'.take(1)'?很難說沒有看到更多的上下文。 –

+1

是的,但是在完成API調用後我需要重新訂閱。 – JaSHin

回答

3

有遺漏的需求在這裏,但假設你希望避免額外的電話,而有一個執行,直到請求完成,你可以使用take(1)repeat()以及可選retry()take(1)將限制第一點擊發射,repeat()onComplete() - 這意味着網絡請求完成後,將再次重新訂閱,因此您將能夠再次接收單擊並執行請求。您也可以考慮重試()以重新訂閱失敗(不會重複請求,但會在請求點擊時再次提供請求)

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

就是這樣!但我正在使用RxSwift「重複」方法丟失:X – JaSHin

+0

@JaSHin你確定嗎? https://github.com/ReactiveX/RxSwift/blob/master/RxSwift/Observables/Implementations/Repeat.swift你可能只需要更新你的軟件包。儘管如此,我對Swift中的包管理一無所知。 –

+2

以及@AluanHaddad說,這可能在RxSwift中被稱爲repeatElement,但我不熟悉RxSwift ..(你把RxJava標籤:)所以在這裏。 – yosriz