2017-03-06 20 views
0

どのように状態を保存せずに複数の長いapi呼び出し(ユーザーがボタンを数回タップするなど)を防ぐことができますか(たとえば、状態を「isLoading」プロパティに保存するなど)。複数のAPI呼び出しを防止する

+0

'.take(1)'を使用している可能性がありますか?失敗した場合に再登録するための再試行()も考えられます(リクエストを繰り返さないでしょう)。より多くの文脈を見ることなく言うのは難しい。 –

+1

はい、しかし、私はapi呼び出しが完了した後に再度再購読する必要があります。 – JaSHin

答えて

3

要求が終了するまで、あなたは、repeat()最初のクリックに排出を制限するrepeat()と、必要に応じてもretry()take(1)take(1)を使用することができ、そこ行方不明の要件はここですが、あなたが実行する1つがありますしながら、追加の呼び出しを行う避けたいと仮定onComplete() - これはネットワーク要求が完了したことを意味するので、再度クリックして再度クリックして要求を実行することができます。

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

それだけです!しかし、私はRxSwiftを使っています。ここでは、 "repeat"メソッドがありません:X – JaSHin

+0

@JaSHinあなたはそれについて確かですか? https://github.com/ReactiveX/RxSwift/blob/master/RxSwift/Observables/Implementations/Repeat.swiftあなたはパッケージを更新するだけでよいでしょう。私はSwiftのパッケージ管理について何も知らない。 –

+2

も@AluanHaddadと言っていますが、これはおそらくRxSwiftのrepeatElementと呼ばれていますが、私はRxSwiftに慣れていません。 – yosriz

関連する問題