RxJS forkJoin不发出值

pjl*_*b12 1 rxjs angular

我正在尝试使用forkJoin运算符来组合两个可观察值并输出一个新值。其中一个电话带回了一组对象,这些对象的数据与保险单上的多个人相关(该部分不能更改)。另一个可观察到的信息告诉我们谁登录。我在考虑使用forkJoin这两个方法来获取两个值并仅返回已登录用户的信息。这是我尝试构建新的可观察对象的方法:

this.incentiveStepsHistory$ = forkJoin({
    incentiveStepsHistory: this._steps.getIncentiveStepsHistory(year),
    loggedInPerson: this._member.loggedInPerson$,
}).pipe(
    tap((data: any) => console.log(data)),
    map((data: any) => {
        // get the data that I want
    })
    untilDestroyed(this),
)
Run Code Online (Sandbox Code Playgroud)

我已经尝试过这种方式,并且放弃了该this.incentiveStepsHistory$ =部分,只是订阅了(仅出于测试目的)。执行此操作并检查开发人员工具中的“网络”选项卡时,我看到了第一个调用并成功返回。第二个可观察值,loggedInPersonBehaviorSubject.asObservable可观察的。当我pipetap在创建可观察的服务,将数据记录到控制台。因此,这两个可观察值在技术上都可以工作。

我还尝试过forkJoin像上述对象那样成为对象的参数,以及将每个可观察对象传递为其自己的参数。没什么区别,一切都一样。

问题在于数据永远不会返回到forkJoin创建该组件的组件。在tap此处显示的管道是从不打,也不是map。显式订阅或通过async模板中的管道订阅具有相同的效果:不输出任何内容。

我觉得自己做对了,但是什么也没做。任何提示,不胜感激。

fri*_*doo 5

forkJoin仅在每个内部Observable完成时发出。您的BehaviorSubject未完成,因此forkJoin不会发出任何东西。

take(1)如果您只关心来自BehaviorSubject的当前值,则可以使用。

this.incentiveStepsHistory$ = forkJoin({
    incentiveStepsHistory: this._steps.getIncentiveStepsHistory(year),
    loggedInPerson: this._member.loggedInPerson$.pipe(take(1)),
})
Run Code Online (Sandbox Code Playgroud)

或者,combineLatest如果您想在BehaviorSubject获得新值时发出新值,则可以使用。

this.incentiveStepsHistory$ = combineLatest(
    this._steps.getIncentiveStepsHistory(year),
    this._member.loggedInPerson$,
)
Run Code Online (Sandbox Code Playgroud)