Эффекты NgRx - сопоставление действий для выполнения последовательных сервисных вызовов и обновления хранилища

Я хочу выполнить одно и то же действие 2 раза подряд с разными объектами, например, я хочу добавить 2 объекта,

this.store.dispatch(new Add(entity1));
this.store.dispatch(new Add(entity2));

проблема, с которой я столкнулся, заключается в том, что я получил результат только одного действия (объект 2 один), и это результат моего действия. Я хочу дождаться результата первого действия, прежде чем передавать второе действие.

@Effect()
add$ = this.actions$
  .ofType<Add>(ADD)
  .pipe(switchMap(a =>
    this.sharedService.add(a.entity, a.api)
      .pipe(map(s => new AddResult(Ok(s.id))))
  .pipe(catchError(e => of(new AddResult(Err(e)))))));

person H.Mateur    schedule 11.10.2018    source источник
comment
learnrxjs.io/operators/combination/concat.html   -  person Chellappan வ    schedule 11.10.2018


Ответы (1)


Вы можете использовать mergeMap вместо switchMap. Вот список карт с их поведением:  введите описание изображения здесь

@effect()
add$ = this.actions$
.ofType<Add>(ADD)
.pipe(mergeMap(a =>
this.sharedService.add(a.entity, a.api)
.pipe(map(s => new AddResult(Ok(s.id))))
.pipe(catchError(e => of(new AddResult(Err(e)))))));
person RV.    schedule 12.10.2018
comment
Да, спасибо, что раньше не знал различий между картами, я использовал mergeMap, и он работал нормально. - person H.Mateur; 13.10.2018