c# - 如何打开 IObservable> 进入 IObservable?
问题描述
假设我有一个返回的函数,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 合并在一起,即使它只发出一次,这也是同样有效的。
推荐阅读
- linux - 从字符串中grep一个字符/单词并计算Linux中出现的次数
- python - 无法在 Windows 10 上安装 pygame
- java - 跳转到上一个索引并继续循环
- c# - .NET MVC 5:在请求之间丢失 cookie
- javascript - 如何在 2 个不同的函数之间共享一个变量?
- ios - react-native run-ios 偶尔构建
- filter - 制表过滤器:取消组合过滤结果
- r - 尝试为几何分布查找 MLE 时出错
- haskell - Haskell 映射函数和 lambda 表达式
- javascript - 是否可以从 Node.js 中可用的路由自动生成 Swagger yaml?