[英]Do something with the data “read only” using observable thread in RxJava
我想知道如何在Observable的線程中處理Observable發出的數據,而不更改數據。 例如,我從服務器請求任務列表並打印出來
//Assume that taskService.getTasks returns an Observable<List<Task>>
Observable<List<Task>> observable = taskService.getTasks(...).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulars.mainThread());
observable.subscribe(tasks -> {
for(Task task: tasks) System.out.println(task);
});
但是然后我想將任務列表保存到磁盤作為緩存。 如何使用運算符在訂閱線程中完成此操作? 我發現了類似map
類似運算符,但是在保存到磁盤后,我必須返回任務列表:
Observable<List<Task>> observable = taskService.getTasks(...).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread());
observable.map(tasks1 -> {
saveToDisk(tasks1);
return tasks1; //Here, I have to return the tasks
});
observable.subscribe(tasks -> {
for(Task task: tasks) System.out.println(task);
});
本質上, map
旨在以一種或另一種方式轉換數據。 在這種情況下,我只想將任務保存到磁盤上而不進行任何更改。 map
不是為此構建的,而且map中的return語句是多余的。 我還發現doOnNext
或doOnEach
我的要求,但是這兩個運算符在觀察者線程中運行代碼。 在上面的示例中,這是android的主線程。 那也不好。 有什么辦法嗎
我認為以下代碼應在后台線程上運行saveToDisk:
Observable<List<Task>> observable = taskService.getTasks(...)
.doOnNext(tasks1 -> {
saveToDisk(tasks1)
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
observable.subscribe(tasks -> {
for(Task task: tasks) System.out.println(task);
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.