combineLatest 组合可观察量之间的依赖关系

Dependency between combineLatest combined observables

我有一个看似简单的用例,在屏幕中我根据排序和 pageIndex 显示数据,这两者都通过 UI 进行更改。所以解决方案很简单

Observable
    .combineLatest(sortObservable, pageIndexObservable, Pair::of)
    .switchMap(tuple -> getData(tuple.sort, tuple.pageIndex))

但是当排序改变时,pageIndex 应该重置为 0。

如果我这样做

Observable
    .combineLatest(
         sortObservable.doOnNext(__ -> pageIndexObservable.onNext(0),
         pageIndexObservable, Pair::of)
    .switchMap(tuple -> getData(tuple.sort, tuple.pageIndex))

然后它发出 (last sort, 0) 然后马上发出 (new sort, 0),id 显然只想得到那个 (new sort, 0),或者以某种方式忽略那个 (last sort, 0),即有条件地阻止 pageIndexObservable 发射。

我不想使用 withLatestFrom,因为我希望 pageIndexObservable 发出来触发 getData

谢谢

您可以使用一个 BehaviorSubject<Pair> 和两个更新规则:

BehaviorSubject<Pair> query = BehaviorSubject.createDefault(Pair.of(0, 0));

query
.switchMap(tuple -> getData(tuple.sort, tuple.pageIndex))
.subscribe(/* ... */);

// ---------------------------------------

void changeSorting(int sort) {
    Pair current = query.getValue();
    query.onNext(Pair.of(sort, 0));
}

void nextPage() {
    Pair current = query.getValue();
    query.onNext(Pair.of(current.sort, current.pageIndex + 1));
}