我用httpRequest编写ngrx效果,它使用Action的action.payload。
从请求中,我获得了我在地图运算符中使用的数据(如果发生错误,我会在 catchError 中处理它(
从后端我只得到布尔值,我如何将 action.payload 从 Action 传播到映射或 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
感谢您的帮助
使用一些较新的 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)))
))
));
你能试试:
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
);