防止多个api调用

时间:2017-03-06 20:00:29

标签: rx-java rxjs reactive-programming rx-swift reactivex

如何在不保存状态的情况下(例如将状态保存到" isLoading"属性),如何防止多个长api呼叫(例如用户多次点按该按钮)。

2 个答案:

答案 0 :(得分:4)

此处缺少要求,但假设您希望在执行任务时避免拨打其他电话,直到请求完成,您可以take(1)使用repeat(),也可以使用retry()take(1)会限制第一次点击的排放,repeat()会在onComplete()时再次重新订阅 - 这意味着网络请求已完成,因此您可以再次接收单击并执行请求。你也可以考虑retry()重新订阅失败(不会重复请求,但会在点击时再次提供请求)

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

答案 1 :(得分:0)

您可以为此使用反跳功能:

.debounce(400, TimeUnit.MILLISECONDS)