我有可觀察到的myObservable
:concatMap()等效但異步像mergeMap()
let myObservable = Observable.of(2000, 1000)
隨着concatMap()
:TOTAL TIME = 3000毫秒時間,導致原來的順序。
myObservable.concatMap(v => Rx.Observable.of(v).delay(v))
// concatMap: 2000, concatMap: 1000
隨着mergeMap()
:TOTAL TIME = 2000米利斯,導致無法在原來的順序。
myObservable.mergeMap(v => Rx.Observable.of(v).delay(v))
// mergeMap: 1000, mergeMap: 2000
我想辦法讓原始順序的結果就像concatMap
,但調用每個嵌套的異步,而不是等待下一個嵌套的觀察到的完成觀察到:
// --- The behavior that I want ---
myObservable.myCustomMap(v => Rx.Observable.of(v).delay(v))
// myCustomMap: 2000, myCustomMap: 1000
// TOTAL TIME = 2000 millis
是否有優雅的方案
編輯:我在尋找一個解決方案,也適用如果源(myObservable
)是異步的,不僅對這種特殊的情況下同步。
你應該使用'forkJoin'。寫一個適當的答案。 – Maxime
你是否期望源'myObservable'異步發射?我的意思是用例比'Observable.of(2000,1000)'更復雜? – martin
@martin是的,用例更復雜,可能是異步 – PerrierCitror