angular - 有效果在不同的情况下调度不同的动作
问题描述
我有以下效果
@Effect()
assignMission$ = this.actions$.pipe(
ofType<featureActions.AssignUAVMissionRequest>(featureActions.ActionTypes.AssignUAVMissionRequest),
concatMap(action =>
of(action).pipe(
withLatestFrom(this.store$.pipe(select(RoutesStoreSelectors.getById(), {routeId: action.payload.routeId}))),
)
),
switchMap(([action, route]) => {
return this.dataService.assignUAVMission(action.payload.params).pipe(
mergeMap(response => {
if (route.saveState === RoutesStoreModels.IRouteSaveState.DRAWED) {
return [
new RoutesStoreActions.OverrideRoute(),
new featureActions.AssignUAVMissionSuccess()
];
} else {
const newRouteId = uuid();
return [
new RoutesStoreActions.AddRoute(),
new featureActions.AssignUAVMissionSuccess()
];
}
}),
catchError((error: HttpErrorResponse) => {
return of(new featureActions.AssignUAVMissionFailed({error}));
}),
);
})
);
在一种情况下,我想调度OverrideRoute
,而AssignUAVMissionSuccess
在另一种情况下,我想调度AddRoute
,而AssignUAVMissionSuccess
不是。
问题是,我的 mergeMap 返回错误
src/app/stores/uavs-store/effects.ts(218,18) 中的错误:错误 TS2345:类型参数 '(response: AssignMissionResponse) => (AssignUAVMissionSuccess | OverrideRoute)[] | (AssignUAVMissionSuccess | AddRoute)[]' 不可分配给“(值:AssignMissionResponse,索引:数字)=> ObservableInput”类型的参数。
但我不完全明白这是如何解决的?
是否有可能产生效果调度不同的动作集?
解决方案
您可以通过返回这样的类型数组来解决它Action
-
mergeMap(response => {
const actions = new Array<Action>();
if (route.saveState === RoutesStoreModels.IRouteSaveState.DRAWED) {
actions.push(new RoutesStoreActions.OverrideRoute());
actions.push(
new featureActions.AssignUAVMissionSuccess()
);
return actions;
} else {
const newRouteId = uuid();
actions.push(new RoutesStoreActions.AddRoute());
actions.push(
new featureActions.AssignUAVMissionSuccess()
);
return actions;
}
})
推荐阅读
- python-3.x - python行用一个元素划分
- node.js - 如何从另一条路线调用一个模型
- sql - 将具有两个不同日期的数据分组并取最新日期
- javascript - nodejs 按文件类型计算文件大小
- rust - 仅匹配有效的 UTF-8 字符
- javascript - 如何检查 discord.js 中是否存在消息
- javascript - Angular 8 - 在单词出现时动态插入带有回调调用的按钮
- exception - 使用 Apache Camel 处理 onException() 异常
- android - 如何从 Rest API 获取动态数据
- centos7 - 参考:jfrog artifactory could not validate router error