полезная нагрузка действия в эффекте - PullRequest
1 голос
/ 01 июля 2019

У меня есть следующий код

  @Effect()
  executeMission$ = this.actions$.pipe(
    ofType<featureActions.ExecuteUsedDroneMissionRequest>(featureActions.ActionTypes.ExecuteUsedDroneMissionRequest),
    withLatestFrom(this.store$.pipe(select(MissionsStoreSelectors.selectAllEntities))),
    switchMap(([action, missions]) => {
      const mission = missions[action.payload.missionId] 
      //....
    })
  );

Теперь у меня есть селектор, который должен удалить эту строку => const mission = missions [action.payload.missionId]

export const selectAllEntities: (state: object) => Dictionary<IMission> = featureAdapter.getSelectors(selectMissionState).selectEntities;
export const getById = () => createSelector(
  selectAllEntities,
  (entities, props) => entities[props.routeId]
);

, но чтобы его использовать, мне нужно добавить полезную нагрузку действия в withLatestFrom, как это

withLatestFrom(this.store$.pipe(select(MissionsStoreSelectors.selectById(), { missionId: action.payload.missionId }))),

, но действие недоступно за пределами switchMap.

Возможно ли это сделать?

Ответы [ 3 ]

2 голосов
/ 01 июля 2019

Используйте concatMap, этот пример взят из моего поста Начните использовать ngrx / эффекты для этого

 concatMap(action =>  
    of(action).pipe(
      withLatestFrom(store.pipe(select(getUserName)))
    )
  ),
1 голос
/ 02 июля 2019

Используйте switchMap для переключения на поток нового наблюдаемого, возвращаемого withLatestFrom, следующим образом:

@Effect()
  executeMission$ = this.actions$.pipe(
    ofType<featureActions.ExecuteUsedDroneMissionRequest>(
      featureActions.ActionTypes.ExecuteUsedDroneMissionRequest
    ),
    switchMap(action => {
      return withLatestFrom(this.store$.pipe(select(MissionsStoreSelectors.selectById(), { missionId: action.payload.missionId })))
    })
  );

Таким образом, у вас есть полезные данные в качестве входных данных, чтобы использовать их в вашем селекторе

1 голос
/ 01 июля 2019
 @Effect()
  executeMission$ = this.actions$.pipe(
    ofType<featureActions.ExecuteUsedDroneMissionRequest>(featureActions.ActionTypes.ExecuteUsedDroneMissionRequest),
    withLatestFrom(
       this.store$.pipe(select(MissionsStoreSelectors.selectAllEntities)),
       (action, missions) => { mission: missions[action.payload.missionId] }
  ),

Что-то подобное?

...