angular - 如何处理具有严重可观察属性的可观察对象?
问题描述
我有一个可观察的对象。当我订阅时,已将其他属性(定义为可观察的)添加到对象中。
const obj = {
a: 'some text'
};
const b$ = of('BBB').pipe(delay(1000));
const c$ = of('CCC');
const obj$ = of(obj).pipe(delay(100));
const res$ = obj$.pipe(
map(obj => Object.assign({
b: b$,
c: c$
}, obj))
)
const subscribe = res$.subscribe(val => console.log(val));
输出仍然包含 observables:
{a: "some text", b: Observable, c: Observable}
但预期的输出应该是:
{a: "some text", b: "BBB", c: "CCC"}
我该如何解决这个问题?这是 StackBlitz:https ://stackblitz.com/edit/typescript-6euwct
解决方案
combineLatest
会带你到那里。
combineLatest(b$, c$, obj$)
.pipe(
map(([b, c, obj]: any) => ({
b,
c,
obj
})),
)
.subscribe(console.log);
任何时候它们中的任何一个发出一个值,您的最终订阅都会触发,例如这样做:
const c$ = interval(1000).pipe(map( () => of('CCC')));
会每秒重新发射一次。或者只是间隔(1000)每秒都会改变 C 的值。
推荐阅读
- python - 如何避免在 scipy 稀疏矩阵中插入不必要的零
- c# - 无法从程序集“Microsoft...AppAuthentication”加载类型“Microsoft...SqlAppAuthenticationProvider”
- sed - sed 或 awk:删除/注释 3 行之前的模式后面的 n 行
- javascript - Html table td:更改边框宽度时如何将宽度保持为0?
- c# - 在 Entity Framework Core 方法表达式的 Select() 中调用方法
- git - 仅当从 GitHub 中的特定分支发出拉取请求时,如何触发 Jenkins 管道?
- c++ - 我如何告诉编译器有一些未定义但会定义的结构?
- tensorflow - 预测一张图片在另一张图片中的位置
- python - XML中的空值,从python转换excel
- c++ - 涉及 moc 文件的 Qt 错误未通过清理项目修复