假设我有一个返回 IObservable<T>
的函数并且这个函数需要初始状态。
let myObservable (initialState: T) :IObservable<T> = (...)
但我只能从另一个可观察的对象获取初始状态,该可观察对象仅发出一次
let initializeObservable: IObservable<S> = (...)
如何将这两者结合起来得到 IObservable<T>
?
let resultObservable = initializeObservable |>
Observable.map (fun initialState -> myObservable initialState)
当前 resultObservable 为 IObservable<IObservable<T>>
但我希望它是 IObservable<T>
并在初始状态就绪后从 myObservable 发出值。
最佳答案
一般来说,如果您采用升高型 A<T>
,将其降低至T
,从 T -> U
投影它并抬起它以获得 A<U>
,该操作称为 bind
.
Observable.bind (fun init -> myObservable init) initializeObservable
或者简化一下:
initializeObservable |> Observable.bind myObservable
至于你的方法,你已经差不多了。
initializeObservable
|> Observable.map (fun initialState -> myObservable initialState)
|> Observable.mergeInner
即使你的 initializeObservable
发射 n 次,你可以将所有的 observable 合并在一起,即使它只发射一次也同样有效。
关于c# - 如何将 IObservable<IObservable<T>> 转换为 IObservable<T>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62518415/