阻止多次 api 调用

Prevent multiple api calls

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

此处缺少要求,但假设您想避免在执行一个要求时进行额外的调用,直到请求完成,您可以将 take(1)repeat() 一起使用,也可以选择 retry(), take(1) 将限制发射到第一次点击, repeat() 将在 onComplete() 时再次重新订阅 - 这意味着网络请求已完成, 因此您将能够再次收到单击并执行要求。您还可以考虑 retry() 以重新订阅失败(不会重复请求,但会在单击时再次使请求可用)

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

您可以为此使用去抖功能:

.debounce(400, TimeUnit.MILLISECONDS)