【问题标题】:Emit value of the observable depends on others observables可观察对象的发射值取决于其他可观察对象
【发布时间】:2019-05-21 03:06:05
【问题描述】:

我有两个科目。

const a$ = new Subject<number>();
const b$ = new Subject<string>();

我想要第三个 observable,即基于上述两个主题。所以取决于发出的主题及其价值,我想进行计算并发出一些价值。

我试过了:

const result$ = a$.pipe(merge(b$))

但是,如果我在merge 之后添加map,我无法检测出可观察值的来源。 combineLatest 也不是这样,因为即使没有发出其中一个主题,我也想得到结果。

【问题讨论】:

  • 结合startWith查看combineLatestwithLatestFromzip(取决于您的用例)。如果你对两个流都进行了一些计算,如果没有合适的值,你应该有“默认”值

标签: javascript angular rxjs observable


【解决方案1】:

为了区分什么来自哪里,你可以映射传入的值:

import {merge} from 'rxjs';

const result$ = merge(
  a$.pipe(map(v => ({a: v})),
  b$.pipe(map(v => ({b: v}))
)

正如您所注意到的,我在这里使用了静态 merge 运算符。在这种情况下看起来更具可读性

【讨论】:

  • 谢谢。我的错误是我试图使用来自rxjs/operatorsmergerxjs)作为静态并且无法弄清楚它返回什么。谢谢
  • 欢迎您。您也可以使用实例运算符来获得相同的输出,但它看起来不太可读 - a.pipe(map(a =&gt; ({a})), merge(b.pipe(map(b =&gt; ({b})))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-11
  • 2017-06-02
  • 1970-01-01
  • 2021-12-28
  • 1970-01-01
  • 1970-01-01
  • 2019-09-09
相关资源
最近更新 更多