Как объединить несколько наблюдаемых в эффект Ngrx? - PullRequest
0 голосов
/ 14 марта 2019

Мой эффект 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.

Ответы [ 2 ]

0 голосов
/ 14 марта 2019

Вы можете просто реструктурировать свою цепочку, чтобы исходное действие было в той же области действия, что и второе:

@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.

0 голосов
/ 14 марта 2019

Вы можете сначала ввести побочный эффект, чтобы сохранить свое действие.

@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'))
  );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...