typescript - 将包含带有 Observables 对象的数组的对象转换为 Observable
问题描述
假设我有这个对象:
const myObject = {
a: 'foo',
b: 'bar',
obs: [{ c: 'foobar', d: of(true) }, { c: 'foobar', d: of(true) }]
}
我怎样才能以类似的方式返回myObject
一个Observable<MyObject>
简单forkJoin()
的已解析 Observables 数组。
目标是:
myObject.subscribe((ob) => console.log(ob));
并收到:
{
a: 'foo',
b: 'bar',
obs: [{ c: 'foobar', d: true }, { c: 'foobar', d: true }]
}
换句话说,我只想订阅一次,myObject
而不是myObject
单独订阅每个 Observable 内部。
感谢您的任何建议!
解决方案
最终,forkJoin
基本上就是你所需要的。之后您可以使用地图创建更新的对象。
这可能看起来像这样:
const myObject = {
a: 'foo',
b: 'bar',
obs: [{ c: 'foobar', d: of(true) }, { c: 'foobar', d: of(true) }]
}
forkJoin(
myObject.obs.map(oby => oby.d)
).pipe(
map(obsRes => ({
...myObject,
obs: myObject.obs.map((oby, i) => ({
...oby,
d: obsRes[i]
}))
}))
).subscribe(console.log);
推荐阅读
- json - 对模型进行序列化,使其对应一个json数据格式
- python - 如何在不中断的情况下修复填充DVWA浏览器的pytonos程序代码?
- wordpress - Wordpress - 用户登录或未登录时的菜单可见性错误
- python - 插入并返回 :array
- python - 将 `subprocess.run` 与包含空格的参数一起使用
- python - 无法在 Spyder/Anaconda 中安装 pandasql
- google-chrome - 无头 Chrome 命令行 - 设置超时
- ruby-on-rails - 为什么,在使用 Faker Gem 时会出现此错误?从以前的答案中,我了解到这与我的 database.yml 有关
- office-js - 如何在office js中添加多个选定的单元格注释?
- window-functions - 分区之间的 clickhouse 移动平均线