1

我有以下代码

  @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] 
      //....
    })
  );

现在,我有一个选择器,它应该删除这一行 => constmission =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 之外操作不可用。

是否有可能做到这一点 ?

4

3 回答 3

3

使用 a concatMap,这个例子来自我的帖子Start using ngrx/effects for this

 concatMap(action =>  
    of(action).pipe(
      withLatestFrom(store.pipe(select(getUserName)))
    )
  ),
于 2019-07-01T06:26:15.410 回答
2
 @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] }
  ),

类似的东西?

于 2019-07-01T06:37:51.480 回答
2

使用 switchMap 切换到 withLatestFrom 返回的新 observable 的流,如下所示:

@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 })))
    })
  );

因此,您将有效负载作为输入以在选择器中使用它

于 2019-07-01T23:44:06.883 回答