我有一些使用 flatMap 的串聯可觀察對象,例如api.call1().flatMap{a-> api.call2(a)}.flatMap{b-> api.call3(a,b) //<- no access to a}問題是在第三個串聯調用中,我需要從前一個調用中得到的結果,但也需要從第一個調用中得到的結果這是方案:A->(a)->B->(b)-> C( 需要b但也需要a )->...我試著這樣解決:1 種方法(在第二個中嵌套了第三個可觀察對象)api.call1() .flatMap{a-> api.call2(a).flatMap{b-> api.call3(a,b)}}它有效,但我知道這不是一個好方法(因為從管道外部傳遞參數)2 方法(更好但有很多樣板文件)api.call1().flatMap{ a-> Observable.combineLatest(Observable.just(a),api.call2(a), BiFunction{ a,b -> Pair(a,b)}) .flatMap(pair:Pair<A,B> -> api.call3(pair.first,pair.second))}}任何人都知道更好的方法(一些時尚運營商)謝謝大家為我可憐的英格斯感到抱歉。
1 回答

慕田峪9158850
TA貢獻1794條經驗 獲得超7個贊
有第二個重載,flatMap它同時接受輸入和輸出。然后您可以將這些組合成一個Pair發送到下一個flatMap
api.call1()
.flatMap(
{ a -> api.call2(a) },
{ a, b -> new Pair(a, b) }
)
.flatMap { pair-> api.call3(pair.first, pair.second) }
添加回答
舉報
0/150
提交
取消