最簡單直接的方法如下:
RxTextView.textChanges(input)
.debounce(500, TimeUnit.MILLISECONDS)
.switchMap(text -> api.queryKeyword(text.toString()))
.observeOn(AndroidSchedulers.mainThread())
.subscribe(results -> {
// handle results
});
switchMap 這個操作符與 flatMap 操作符類似,但是區別是如果原 Observable 中的兩個元素,通過 switchMap 操作符都轉爲 Observable 之後,如果後一個元素對應的 Observable 發射元素時,前一個元素對應的 Observable 尚未發射完所有元素,那麼前一個元素對應的 Observable 會被自動取消訂閱,尚未發射完的元素也不會體現在 switchMap 操作符調用後產生的新的 Observable 發射的元素中。
取消上次請求方式也可用requestDisposable?.dispose()方式