簡體   English   中英

使用RxJava中的可觀察線程對數據進行“只讀”操作

[英]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語句是多余的。 我還發現doOnNextdoOnEach我的要求,但是這兩個運算符在觀察者線程中運行代碼。 在上面的示例中,這是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM