2017-03-16 10 views
1

task 1を実行してから、task 2を実行したい場合は、送信されたアイテムを組み合わせる必要はありません。それは彼らがそれらをマージするために、Observable<Void>を返すようにする良い方法マッピング可観測可能 to Observable <Void>

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

です:私はこれを持っていますか? 両方のタスクが独立しているので、最初のタスクは空のObservableを返しますが、2番目のタスクは実行する必要があります。

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

もしそうなら、Observable<Void>Observable<Something>をマッピングするための任意の「正しい」方法はありますか?私は次のようにしています:

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

あなたはMerged Observableの排出物で何かしていますか? Merge Observableを使用してストリームをさらに下に移動しますか? – yosriz

+0

いいえ、私はそうではありません。私はただの仕事をしたい。放出された品目は重要ではない。 –

答えて

2

値をVoidにマッピングすることは有効ですが、RxJavaはCompletableを導入しました。これはObservableの変形であり、項目を出力せず、完了とエラーの通知だけです。 ここで使用することができます。放出された値は気にしないので、よりクリーンなAPIが得られますし、値が小さいものを意味するようにマップする必要もありません。

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

これはまさに私が探していたものです、ありがとう! –

関連する問題