我有2个可观察对象,将只返回1个东西。两者我都需要值来做其他事情。
如何同时订阅可观察对象和接收通知只有当两个值都可用时?
我试过这样做:
final Observable<String> obs1 = Observable.just("A", "B");
final Observable<String> obs2 = Observable.just("A", "B");
Observable.zip(
obs1,
obs2,
(a, b) -> {
System.out.println("Processing " + a + b);
return null;
}
);
但是什么都不会发生,除非我注册一个订阅者(这将是无用的)。
我使用的(丑陋的)解决方案是嵌入订阅,例如: final Observable<String> obs1 = Observable.just("A", "B");
final Observable<String> obs2 = Observable.just("A", "B");
obs1.subscribe(
a -> {
obs2.subscribe(
b -> {
System.out.println("Processing " + a + b);
}
);
}
);
这么普通的事情怎么做?
可观察对象是惰性的,所以你需要一个订阅者来完成这项工作。要组合来自两个可观察对象的项,需要使用zip
运算符。对第一个解决方案做一个小修改:
final Observable<String> obs1 = Observable.just("A", "B");
final Observable<String> obs2 = Observable.just("A", "B");
Observable.zip(
obs1,
obs2,
(a, b) -> {
System.out.println("Processing " + a + b);
return null;
}
).subscribe();