如何将 action.payload 从 ngrx-effect 中的 Action 传播到 catchError 或 map 运算符?

How propagate action.payload from Action in ngrx-effect to catchError or map operator?

我用 httpRequest 写 ngrx 效果,它使用 action.payload 的 Action。

从请求中我得到我在地图运算符中使用的数据(如果发生错误我在 catchError 中处理它)

从后端我只得到布尔值,如何将 action.payload 从 Action 传播到 map 或 catchError 运算符?

示例:

effect= this.actions$
    .ofType(Actions.IS_OK)
    .pipe(
         mergeMap(action => this.service.isOk(action.payload),
         map((isOk: boolean)  => new SuccessAction(isOk, action.payload), //here I need somehow get to action.payload value
         catchError(error => of(new ErrorAction(error, action.payload))) //here I need somehow get to action.payload value
     );

而且我无法存储有效负载来存储,因为我触发了更多操作:Actions.IS_OK

感谢帮助

你能试试吗:

effect = this.actions$
    .ofType(Actions.IS_OK)
    .pipe(
         mergeMap(action => this.service.isOk(action.payload).pipe(
             map((isOk: boolean) => { payload: action.payload, isOk: isOk} )
         ),
         // need to create proper interface forPayload + isOk 
         map((payloadPlusIsOk: any)  => new SuccessAction(payloadPlusIsOk.isOk, payloadPlusIsOk.payload),
         catchError(error => of(new ErrorAction(error, action.payload))) //here I need somehow get to action.payload value
     );

使用一些较新的 rxjs/ngrx 语法可以写成:


isOkEffect$ = createEffect(() => this.actions$.pipe(
  ofType(Actions.IS_OK),
  mergeMap(({payload}) => this.service.isOk(payload)).pipe(
    map((isOk: boolean) => new SuccessAction(isOk, payload),
    catchError(error => of(new ErrorAction(error, payload)))
  ))
));