2017-05-04 63 views
3

链接5-6的最佳实践链接正在执行的单个可观察对象是什么? 例如我有Single1-> Single2-> ... - > Single6。依次链接多个Observable

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

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

这种情况最好的指导方针是什么?

回答

0

你不需要巢flatMap电话,你可以简单地把它们连并获得可观察数据流的清晰链条:

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); 
     } 
    }); 

与拉姆达它可以得到很整洁:

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