【问题标题】:RxJS - concat and merge two observablesRxJS - 连接和合并两个可观察对象
【发布时间】:2019-01-10 16:49:44
【问题描述】:

我有两个 Observables

public readonly availableTags$ = this.tagSandbox.observeTags()
public readonly jobs$ = this.jobSandbox.observeJobsAfterFiltering()

我将其用作带有 async 管道的 Angular 组件的 Input 值。

我想将这两个可观察对象转换为一个对象,并将它们的值“合并”到单个对象中。

{
   availableTags: Tag[],
   jobs: Job[]
}

但是,来自jobs$ 的值应该在availableTags$ 发出它的值之后才被提取。 这可能吗?

所有这些都是为了避免输入属性的“双重重新加载”。

【问题讨论】:

    标签: rxjs


    【解决方案1】:

    您可以为此使用concatMapmergeMap 也可以),然后将第二次调用的响应与第一次调用的结果一起映射到单个对象中:

    availableTags$.pipe(
      concatMap(availableTags => jobs$.pipe(
        map(jobs => ({ availableTags, jobs })),
      ))
    );
    

    【讨论】:

    • 谢谢马丁。使用 Zip 怎么样?
    • zip 仅在所有源 Observable 发出相同数量的项目但您说要在 availableTags$ 之后运行 jobs$ 时才发出。
    • 你是对的!如果我需要在 availableTags 之后获取多个值而不是一个,该怎么办?我会使用这个 concatMap 和 combineLatest 来处理多个 observables,对你来说听起来不错?
    • 那么你可以返回forkJoin(jobs$, other1$, other2$, ...),而不是只返回jobs$,而forkJoin只会在其所有源Observables至少发射一次并完成时发射。
    • 问题是那些 Observable 永远不会完成,它们是 Redux 状态管理的一部分
    猜你喜欢
    • 2020-09-22
    • 1970-01-01
    • 2023-01-25
    • 2016-06-18
    • 2019-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多