withLatestFrom не возвращается - PullRequest
0 голосов
/ 04 июня 2019

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

  @Effect()
  createMission$ = this.actions$.pipe(
    ofType<featureActions.CreateMissionRequest>(featureActions.ActionTypes.CreateMissionRequest),
    withLatestFrom(this.store$),
    map(([action, state]) => {
      return this.dataService.createMission(state.missions.entities[action.payload.routeId])).pipe(
        map(response => new featureActions.CreateMissionSuccess({response, mission: state.missions.entities[action.payload.routeId]})),
        catchError((error: HttpErrorResponse) => {
          return of(new featureActions.CreateMissionFailed({error}));
        }),
      );
    }),
  );

Вместо того, чтобы манипулировать магазином, в моем коде есть селектор, подобный этому =>

export const featureAdapter: EntityAdapter<IMissionRoute> = createEntityAdapter<IMissionRoute>({
  selectId: model => model.routeId,
});
export const selectAllEntities: (state: object) => Dictionary<IMissionRoute> = featureAdapter.getSelectors(selectMissionState).selectEntities;


export const getById = () => createSelector(
  selectAllEntities,
  (entities, props) => entities[props.id]
);

Я хотел бы использовать его вthe withLatestFrom

    withLatestFrom((action) => this.store$.pipe(select(MissionsStoreSelectors.getById(), {id : action.payload.routeId}))),
    map(([action, mission]) => {
          /// 
     }

Проблема, с которой я сталкиваюсь, заключается в том, что, если я сделаю более позднюю реализацию, у меня не будет 2 наблюдаемых (один для действия один для миссии), а только один.

Я не понимаю, что изменить, чтобы он работал

1 Ответ

1 голос
/ 04 июня 2019

Не похоже, что вам нужно действие в вашем @Effect, теперь, когда вы переместили логику выбора миссии в селектор.

ТАК что-то подобное должно / может работать (непроверенный код ниже).

например

 @Effect()
  createMission$ = this.actions$.pipe(
    ofType<featureActions.CreateMissionRequest>(featureActions.ActionTypes.CreateMissionRequest),
    withLatestFrom((action) => this.store$.pipe(select(MissionsStoreSelectors.getById(), {id : action.payload.routeId}))),
    map(_mission => {
      return this.dataService.createMission(_mission).pipe(
        map(response => new featureActions.CreateMissionSuccess({response, mission: _mission})),
        catchError((error: HttpErrorResponse) => {
          return of(new featureActions.CreateMissionFailed({error}));
        }),
      );
    }),
  );
...