2017-03-16 100 views
1

我想執行task 1,然後task 2而不需要組合它們的發射項目。我有這樣的:Mapping Observable <Something> to Observable <Void>

interface Service { 
    Observable<Something> doTask1(); 
    Observable<SomethingElse> doTask2(); 
} 

它是一個很好的方法,使他們以合併它們返回Observable<Void>? 這兩個任務都是獨立的,因此第一個任務可能會返回一個空的Observable,但第二個任務必須執行。

public Observable<Void> doTasks() { 
    Observable.merge(service.doTask1(), service.doTask2()); 
} 

如果是這樣,有沒有「正確」的方式來映射一個Observable<Something>Observable<Void>?我這樣做:

public class TaskService implements Service { 
    public Observable<Void> doTask1() { 
     return getSomething().map(new Func1<Something, Void>() { 
        @Override 
        public Void call(Something something) { 
         return null; 
        } 
       }); 
    } 
} 

任何意見,將不勝感激。

+0

你正在做一些合併Observable的排放? 你在合併的Observable下進一步做什麼? – yosriz

+0

不,我不是。我只是想執行任務。發射物品不重要。 –

回答

2

將值映射到Void是一種有效的方式,但RxJava引入了Completable,這是Observable的變體,它不排放項目,而只是完成和錯誤通知。 你可以在這裏使用它,因爲你不關心發射的值,那麼你會得到更清潔的API,並且也不需要將值映射到意味着更少的值。

public Completable doTasks() {  
    Completable.merge(service.doTask1().toCompletable(), service.doTask2().toCompletable()); 
} 
+0

這就是我一直在尋找的,謝謝! –

相關問題