2017-05-04 64 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);