如何在不保存状态的情况下(例如将状态保存到" isLoading"属性),如何防止多个长api呼叫(例如用户多次点按该按钮)。
答案 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)