2017-03-06 69 views
0

如何在不保存状态(例如,将状态保存为“isLoading”属性)的情况下防止多个长时间api调用(例如用户多次点击按钮)。防止多个API调用

+0

也许使用'.take(1)'?很难说没有看到更多的上下文。 –

+1

是的,但是在完成API调用后我需要重新订阅。 – JaSHin

回答

3

有遗漏的需求在这里,但假设你希望避免额外的电话,而有一个执行,直到请求完成,你可以使用take(1)repeat()以及可选retry()take(1)将限制第一点击发射,repeat()onComplete() - 这意味着网络请求完成后,将再次重新订阅,因此您将能够再次接收单击并执行请求。您也可以考虑重试()以重新订阅失败(不会重复请求,但会在请求点击时再次提供请求)

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

就是这样!但我正在使用RxSwift“重复”方法丢失:X – JaSHin

+0

@JaSHin你确定吗? https://github.com/ReactiveX/RxSwift/blob/master/RxSwift/Observables/Implementations/Repeat.swift你可能只需要更新你的软件包。尽管如此,我对Swift中的包管理一无所知。 –

+2

以及@AluanHaddad说,这可能在RxSwift中被称为repeatElement,但我不熟悉RxSwift ..(你把RxJava标签:)所以在这里。 – yosriz