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状态管理的一部分