我对Rx很陌生,我的情况是我找不到任何相关的东西(或者我可能不会问正确的问题)。 我有一个可以触发特定方法的observable。然而,要调用该方法,我需要来自第二个observable的值(它将在第一个之前始终具有该值)。如何组合这两个,以便只在第一个observable触发时才调用该方法?它就像使用combineLatest一样,但如果Observable中的任何一个发射,那就会触发。 BR, 丹尼尔
答案 0 :(得分:1)
如果我正确理解了这个问题,你可以使用withLatestFrom
运算符,以便组合和后续发射被第一个可观测值门控。
它与最新组合列在同一页面上: http://reactivex.io/documentation/operators/combinelatest.html
答案 1 :(得分:0)
这很简单。一旦第一个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
}
});
}
});
答案 2 :(得分:0)
您可以使用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
}
});