Мой эффект NGRX выполняет запрос API, а затем отправляет новое действие. В этом новом действии мне нужен доступ к начальному действию но эта ссылка теряется после switchMap:
@Effect()
public myAction$: Observable<Action> = this.actions$.pipe(
ofType<DoSomethingRequest>(MyActions.DO_SOMETHING),
switchMap((action)=> this.backendService.doSomething(action.id, action.payload),
map(dto => new DoSomethingSuccess(/* here I need both action.payload and dto */))
);
Как я могу сохранить исходное действие в своей цепочке? Мне нужно и действие, и результат вызова API.





Вы можете сначала ввести побочный эффект, чтобы сохранить свое действие.
@Effect()
public myAction$: Observable<Action> = this.actions$.pipe(
ofType<DoSomethingRequest>(MyActions.DO_SOMETHING),
switchMap((action)=> {
localStorage.setItem('pastAction', action);
return this.backendService.doSomething(action.id, action.payload);
}),
map(dto => new DoSomethingSuccess(dto, localStorage.getItem('pastAction'))
);
Вы можете просто реструктурировать свою цепочку, чтобы исходное действие находилось в той же области, что и второе:
@Effect()
public myAction$: Observable<Action> = this.actions$.pipe(
ofType<DoSomethingRequest>(MyActions.DO_SOMETHING),
switchMap((action)=> this.backendService.doSomething(action.id, action.payload).pipe(
map(dto => new DoSomethingSuccess(/* here I need both action.payload and dto */)),
),
);
В вашем случае использования не имеет значения, поместите ли вы map внутри или снаружи switchMap.
Ну, что вы знаете. Иногда самые простые решения являются лучшими. Спасибо