为什么 debounce() with toList() 在 RxAndroid 中不起作用?



当我使用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);
});

最新更新