Angular 从API加载数据后从存储加载特定数据
我在我的项目中有这种RXJS效果,在一个操作中,我从服务器加载一个组织,然后尝试根据组织ID从NGRX存储中选择一个书签。在效果结束时,我用数据发送我的成功操作 选择Organization$=createEffect=>this.actions$.pipe OfTypeOrganizationsActionTypes.selectOrganization, 最晚从 this.store.pipeselectAuthSelectors.selectCurrentUser, this.store.pipeselectContextSelectors.getContext , switchMap[操作、用户、上下文]=> 分叉连接[ 用户, 当然, this.organizationservice.getOrganizationById上下文、action.id、, this.moduleService.getAllSimpleModulescontext ] , switchMap[用户、上下文、组织、模块]=> 分叉连接[ 组织方面, 关于模块, this.store.pipeselectBookmarkSelectors.selectbookmarkbyorganization{ userId:user.id, 上下文 组织密钥:organization.key } ] , switchMap[组织、模块、书签]=>[ OnSelectorganization{organization,modules,bookmark} ], catchErrorerror=>OfOnSelectorganisatorError ; 问题是,我的成功行动从不触发,我也不会抛出任何类型的错误。 我可以在所有开关映射中中断效果,并查看除最后一个以外的数据,最后一个从未被击中,因此我怀疑我的书签选择器可能有问题 我的书签选择器如下所示,此时数组中没有书签,因此此函数返回undefined 导出常量SelectBookmarkByOrganization=createSelector 选择所有书签, 书签:BookmarkDto[],props=>{ const bookmark=\链书签 .filterb=> b、 userId==props.userId &&b.serverContext==props.context &&b.OrganizationKey==道具.OrganizationKey 第一 价值 返回书签; } ; 对我来说,这似乎有点混乱,我正在寻找一些关于如何改进此代码并同时消除此错误的建议 似乎最后一个forkJoin没有从定义中发出任何东西 如果内部可观察对象未完成,forkJoin将永远不会发出值 遵循选择器应该完成的步骤 我建议在选择器上使用take1/first来完成它,另外,尝试使用startwith,但我认为undefined应该可以 此外,动作的开关地图转移到地图-无需展平 应该这样做:Angular 从API加载数据后从存储加载特定数据,angular,rxjs,ngrx-effects,Angular,Rxjs,Ngrx Effects,我在我的项目中有这种RXJS效果,在一个操作中,我从服务器加载一个组织,然后尝试根据组织ID从NGRX存储中选择一个书签。在效果结束时,我用数据发送我的成功操作 选择Organization$=createEffect=>this.actions$.pipe OfTypeOrganizationsActionTypes.selectOrganization, 最晚从 this.store.pipeselectAuthSelectors.selectCurrentUser, this.store.
switchMap(([user, context, organisation, modules]) =>
forkJoin([
of(organisation),
of(modules),
this.store.pipe(
select(BookmarkSelectors.selectBookmarkByOrganisation, {
userId: user.id,
context,
organisationKey: organisation.key
}),
take(1),
)
])
),
map(([organisation, modules, bookmark]) =>
onSelectOrganisation({organisation, modules, bookmark})
),
对于一般的调整:若可能的话,将其简化一点-对于很多的,开关映射,也许可以看看zip/CombineTest/etc之间的区别