簡體   English   中英

具有效果在不同情況下會發出不同的動作

[英]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}));
        }),
      );
    })
  );

在一種情況下,我想分派OverrideRouteAssignUAVMissionSuccess在另一種情況下,我想分派AddRouteAssignUAVMissionSuccess

問題是,我的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM