阻止多次 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)
如何在不保存状态(例如将状态保存到 "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)