2017-03-16 99 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

这就是我一直在寻找的,谢谢! –

相关问题