按顺序链接多个Observable

时间:2017-05-04 00:22:50

标签: rx-java rx-java2 flatmap

连续执行5-6个单一可观察对象的最佳做法是什么? 例如,我有Single1-> Single2-> ... - > Single6。

Single2取决于Single1&#39的结果。 Single3取决于Single2结果等。

我一直在使用嵌套的service HelloService { rpc SayHello (HelloRequest) returns (HelloResponse) {} } ,但代码变得非常长,可读性非常低。

这个案例的最佳指南是什么?

1 个答案:

答案 0 :(得分:0)

您不需要嵌套flatMap调用,您只需链接它们并获得明确的Observable流链:

 single1
    .flatMap(new Func1<Item1, Single<Item2>>() {
        @Override
        public Single<Item2> call(Item1 obj) {
            return getSingle2(obj);
        }
    })
    .flatMap(new Func1<Item2, Single<Item3>>() {
        @Override
        public Single<Item3> call(Item2 obj) {
            return getSingle3(obj);
        }
    })
    .flatMap(new Func1<Item3, Single<Item4>>() {
        @Override
        public Single<Item4> call(Item3 obj) {
            return getSingle4(obj);
        }
    })
    .flatMap(new Func1<Item4, Single<Item5>>() {
        @Override
        public Single<Item5> call(Item4 obj) {
            return getSingle5(obj);
        }
    })
    .flatMap(new Func1<Item5, Single<Item6>>() {
        @Override
        public Single<Item6> call(Item5 obj) {
            return getSingle6(obj);
        }
    });

并且使用lambda它可以变得非常整洁:

single1
    .flatMap(this::getSingle2)
    .flatMap(this::getSingle3)
    .flatMap(this::getSingle4)
    .flatMap(this::getSingle5)
    .flatMap(this::getSingle6);