[英]NGRX - dispatch action on catchError effect with different payload
[英]having an effect dispatch different action in different case
我有以下效果
@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:類型為'(響應:AssignMissionResponse)=>(AssignUAVMissionSuccess | OverrideRoute)[]的參數 (AssignUAVMissionSuccess | AddRoute)[]'不可分配給類型'(value:AssignMissionResponse,index:number)=> 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;
}
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.