我想执行task 1
然后task 2
而不需要合并他们发出的项目。我有这个:
interface Service {
Observable<Something> doTask1();
Observable<SomethingElse> doTask2();
}
让它们返回Observable<Void>
以合并它们是一种好方法吗?
这两个任务都是独立的,所以第一个任务可以返回空Observable
,但第二个任务必须执行。
public Observable<Void> doTasks() {
Observable.merge(service.doTask1(), service.doTask2());
}
如果是这样,有没有&#34;正确&#34;将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 :(得分:2)
将值映射到Void是一种有效的方法,但是,RxJava引入了Completable
,它是Observable
的变体,不会发出项目,只是完成和错误通知。
你可以在这里使用它,因为你不关心发出的值,那么你将获得更清晰的API,也不需要将值映射到更少的值。
public Completable doTasks() {
Completable.merge(service.doTask1().toCompletable(), service.doTask2().toCompletable());
}