angular - NGRX Effect 不过滤操作/管道内的功能被执行
问题描述
我有一个效果,但是在它里面的第一个 switchMap 之后的 mergeMap 被触发而不触发 GetPackageCalendar 类型的动作
@Effect()
loadCalendar$ = this.actions$
.pipe(
ofType(fromActions.GetPackageCalendar),
switchMap(() => this.store.select(selectRouterState)),
mergeMap(
(state: RouterStateUrl) => this.store.select(selectCalendarParams).pipe(
switchMap((calParams) => this.getPackageCalendar(state, calParams)),
//this gets executed
),
),
map((calendar: CalendarRS) => new fromActions.SetPackageCalendar(calendar)),
);
`
怎么了?
我想从商店中选择两个值并将它们作为参数传递给getPackageCalendar
解决方案
我的猜测是因为store select
你的第一个部分 switchMap
。它继续订阅GetPackageCalendar
after first call。在这种情况下,您只想选择一次存储值。所以在执行后包括一个take(1)
自动取消订阅。
@Effect()
loadCalendar$ = this.actions$
.pipe(
ofType(fromActions.GetPackageCalendar),
switchMap(() => {
// take one only
const obs$ = this.store.select(selectRouterState).pipe(take(1));
return obs$;
}),
...
);
推荐阅读
- acumatica - 行选择异常
- c - 回车时在多种显示记录格式之间切换
- java - Android 开发 - 编译正常,运行时崩溃
- html - CSS同级选择器不适用于过渡
- javascript - 不存在的 Smarty 错误?
- react-router - browserHistory 在 React-router 中不起作用
- java - 数组内的数组未按预期工作
- odbc - 使用 ODBC 数据源管理员在 Management Studio 中创建与 SAGE 50 US 数据库的链接服务器
- node.js - 无法在 express 中设置响应标头
- sql - SQL Server CTE 循环;将所有记录一起插入