当我使用debounce()
时,然后从后端获取数据和数据 我想转换为另一个数据,最后使用toList()
. 当我使用toList()
什么都没有发生时,没有任何日志不在订阅和错误中,没有toList()
它的工作,subscribe()
方法输入与我有书籍列表一样多,我测试了代码的第二部分,debounce()
只是getItems()
并使用toList()
它的工作原理。 下面是我的代码,第一部分是debounce()
和itList()
,它不起作用,第二部分是toList()
工作
public Flowable<List<Book>> getItems(String query) {}
textChangeSubscriber
.debounce(300, TimeUnit.MILLISECONDS)
.observeOn(Schedulers.computation())
.switchMap(s -> getItems(s).toObservable())
.flatMapIterable(items -> items)
.map(Book::convert)
.toList()
.observeOn(AndroidSchedulers.mainThread())
.subscribe(books -> {
Log.i("test", "" + books.toString());
}, error -> {
Log.i("test", "" + error);
});
getItems(query).flatMapIterable(items -> items)
.map(Book::convert)
.toList()
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe(books -> {
Log.i("test", "" + "" + books.toString());
}, error -> {
Log.i("test", "" + error);
});
>toList
要求序列终止,这不会发生在响应文本事件的外部流上。您应该将书籍的处理移动到switchMap
:
textChangeSubscriber
.map(CharSequence::toString) // <-- text components emit mutable CharSequence
.debounce(300, TimeUnit.MILLISECONDS)
.observeOn(Schedulers.computation())
.switchMap(s ->
getItems(s)
.flatMapIterable(items -> items)
.map(Book::convert)
.toList()
.toFlowable() // or toObservable(), depending on textChangeSubscriber
)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(books -> {
Log.i("test", "" + books.toString());
}, error -> {
Log.i("test", "" + error);
});