RxJS-合并和合并两个观测值

RxJS-合并和合并两个观测值,rxjs,Rxjs,我有两个观测到的 public readonly availableTags$ = this.tagSandbox.observeTags() public readonly jobs$ = this.jobSandbox.observeJobsAfterFiltering() 我将其用作带有async管道的角度组件的输入值 我想将这两个可观测值转换为一个,并将它们的值“合并”到一个对象中。 { availableTags: Tag[], jobs: Job[] } 但是,只有在

我有两个观测到的

public readonly availableTags$ = this.tagSandbox.observeTags()
public readonly jobs$ = this.jobSandbox.observeJobsAfterFiltering()
我将其用作带有
async
管道的角度组件的
输入值

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

{
   availableTags: Tag[],
   jobs: Job[]
}
但是,只有在
availableTags$
发出其值后,才能从
jobs$
中获取该值。 可能吗


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

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

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

谢谢你,马丁。使用Zip怎么样?
Zip
仅当所有源观测值发出相同数量的项目时才会发出,但您说要在
availableTags$
之后运行
jobs$
。您说得对!如果我需要在availableTags之后获取多个值,而不是仅获取一个值,该怎么办?我会用这个concatMap和combineLatest来测试多个观测值,听起来不错吧?然后你可以返回
forkJoin(jobs$,other1$,other2$,…),而不是只返回
jobs$
forkJoin
仅当其所有源观测值至少发射一次并完成时才会发射。问题是这些观测值永远不会完成,它们是Redux状态管理的一部分