Действующий массив возврата NGRX - PullRequest
1 голос
/ 23 марта 2020

Когда я пытаюсь запустить код ниже:

functionMap = {
[ActionTypeEnum.TYPE_FIRST.toLowerCase()]:[getInitialDataStatus({statusType: 'disabled'}),fetchImportantDataFirst()],
[ActionTypeEnum.TYPE_SECOND.toLowerCase()]:[getInitialDataStatus({}),
                        fetchImportantDataSecond()],
[ActionTypeEnum.TYPE_THIRD.toLowerCase()]:[getInitialDataStatus({}),
                        fetchImportantDataThidr()]
}

 startMultpileActionDepensOnType$ = createEffect(() => this.actions$.pipe(
        ofType(startMultpileActionDepensOnType),
        withLatestFrom(this.store$.select(selectTypeActions)),
        map(([action, select]) => {
                const actionType = select.type.toLowerCase();
                return this.unctionMap[actionType]

            }
        )
    ));

Я получаю сообщение об ошибке:

TS2322: Type 'Observable<TypedAction<string>[]>' is not assignable to type 'Observable<Action>'. Property 'type' is missing in TypedAction<string>[].

Но когда я изменяю на: functionMap:{},

Я получил ошибку:

Action must have a type property

1 Ответ

1 голос
/ 23 марта 2020

Внутри effect, чтобы получить несколько действий, поэтому массив действий, вы должны использовать оператор switchMap:

load$ = createEffect(() => this.actions$.pipe(
  ofType(actions.load),
  switchMap(action => [
    actions.loadItems(),
    actions.loadHistory();
  ])
))

Так что в вашем случае, functionMap возвращает массив действия:

startMultipleActionDepensOnType$ = createEffect(() => this.actions$.pipe(
  ofType(startMultipleActionDepensOnType),
  withLatestFrom(this.store$.select(selectTypeActions)),
  switchMap(([action, select]) => {
    const actionType = select.type.toLowerCase();
    return this.functionMap[actionType];
  })
));
...