将Observable<Something>映射为Observable<Void>

3

我想先执行任务1,然后再执行任务2,而不需要组合它们发出的项目。我有以下代码:

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;
                    }
                });
    } 
}

任何建议都将受到赞赏。


你在处理合并后的 Observable 的发射值吗? 在下游的流中,你会对合并后的 Observable 进行什么操作? - yosriz
不,我不是。我只想执行任务。发出的物品并不重要。 - Héctor
1个回答

2

将值映射到Void是一种有效的方式,但是RxJava引入了Completable,它是Observable的一种变体,不会发出项目,而只是完成和错误通知。 您可以在此处使用它,因为您不关心发出的值,那么您将获得更清洁的API,并且也不需要将值映射为无意义的值。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接