延期可观察的电话

时间:2017-06-28 01:37:21

标签: rx-java reactive-programming rx-java2

我有5个观察者说

Observable<String> obs1 = getObs1();
Observable<String> obs2 = getObs2();
Observable<String> obs3 = getObs3();
Observable<String> obs4 = getObs4();
Observable<String> obs5 = getObs5();

getObsX()的实施是通过RxNetty进行网络呼叫。

由于所有都是独立呼叫,我需要同时启动它们。

完成obs1obs2后,我需要开始调用getObs6(),这取决于obs1obs2。我可以做这样的事情。

    Observable.zip(obs1, obs2, (obs1, obs2) -> {
        return getObs6()
    })

;

获得obs6后,我需要使用obs1obs2obs3obs4obs5和{{1获取obs6

那么如何订阅obs7两次,一次获得obs1和另一次

1 个答案:

答案 0 :(得分:0)

对不起,我不是Java开发人员所以我会在c#中给你答案 - 我希望没问题。

这就像这样简单:

var query =
    from i1 in getObs1()
    from i2 in getObs2()
    from i3 in getObs3()
    from i4 in getObs4()
    from i5 in getObs5()
    from i6 in getObs6(i1, i2)
    from i7 in getObs7(i1, i2, i3, i4, i5, i6)
    select i7;

我使用以下代码对此进行了测试:

IObservable<int> getObs1() => Observable.Return(1);
IObservable<int> getObs2() => Observable.Return(2);
IObservable<int> getObs3() => Observable.Return(3);
IObservable<int> getObs4() => Observable.Return(4);
IObservable<int> getObs5() => Observable.Return(5);
IObservable<int> getObs6(int x, int y) => Observable.Return(x * y);
IObservable<int> getObs7(params int[] x) => Observable.Return(x.Aggregate((j, k) => j * k));

我得到了240的正确答案。