【问题标题】:chaining multiple Observables sequentially顺序链接多个 Observable
【发布时间】:2017-10-01 23:40:15
【问题描述】:

链接 5-6 个按顺序执行的单个可观察对象的最佳做法是什么? 例如我有 Single1->Single2-> ... ->Single6。

Single2 取决于 Single1 的结果。 Single3 取决于 Single2 结果等。

我一直在使用嵌套的flatMap,但代码变得很长,可读性很低。

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

【问题讨论】:

    标签: rx-java rx-java2 flatmap


    【解决方案1】:

    你不需要嵌套 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);
    

    【讨论】:

      猜你喜欢
      • 2018-04-27
      • 2016-12-26
      • 1970-01-01
      • 2017-06-24
      • 2020-03-01
      • 2018-03-24
      • 2017-05-12
      • 2023-03-22
      • 1970-01-01
      相关资源
      最近更新 更多