只有在第一次触发时才会合并2个观察点
问题描述:
对于Rx我很新,我有一种情况是我没有找到任何关于(或者我没有提出正确的问题)。 我有一个可触发的应该触发一个特定的方法。不过要调用这个方法,我需要第二个可观察值(它会在第一个值之前总是有这个值)。我该如何结合这两种方法才能在第一个可观察到的火灾发生时才调用该方法?这就像combineLatest一样,但是如果任何一个Observables发射,那么就会发射。 Br, Daniel只有在第一次触发时才会合并2个观察点
答
如果我正确地理解了这个问题,您可以使用withLatestFrom
运算符,以便组合和随后的排放由第一个可观察值进行门控。
它列出了在同一页上结合最新: http://reactivex.io/documentation/operators/combinelatest.html
答
这是相当简单的。您只需在第一个observable完成时调用另一个observable,或者如果第二个observable依赖于第一个observable的连续数据接收,则需要调用onNext()中的第二个observable。
以下代码试图说明可观察代码如何最终看起来。我没有检查语法等错误,所以使用下面的代码来形成一个想法。
Observable.just(getDataFromServer())
.subscribeWith(new DisposableObserver() {
ArrayList<MyData> dataList = new ArrayList<>();
public void onNext(MyData d) {
// call second observable here if it relies on batches of data the first observable has
dataList.add(d);
}
public void onComplete() {
Observable.from(dataList).map(new Func1<MyData, String>() {
@Override public String call(MyData data) {
// apply your operations etc
}
});
}
});
答
您可以使用Flatmap()如果您使用的是Java 8然后做同样的 :
Observable.just(function1()).flatMap(dataFromFirstObservable->
Observable.just(function2(dataFromFirstObservable))
).subscribe(resultFromSecondObservable -> {
//perform action here
});
如果使用Java 7
Observable.just(getData1()).flatMap(new Function<Integer, ObservableSource<?>>() {
@Override
public ObservableSource<?> apply(Integer integer) throws Exception {
return Observable.just(function2(integer));
}
}).subscribe(new Consumer<Object>() {
@Override
public void accept(Object o) throws Exception {
//perform action here
}
});