@ ngrx эффект не запускается во второй раз


Я только начал изучать @ngrx / store и @ngrx.эффекты и создали свой первый эффект в моем приложении Angular / Ionic. Он работает нормально в первый раз, но если я снова отправлю событие в магазин (т. е. при повторном нажатии кнопки), ничего не произойдет (не будет выполнен ни один сетевой вызов, ничего в журналах консоли). Есть ли что-то очевидное, что я делаю неправильно? Вот результат:

@Effect() event_response$ = this.action$
    .ofType(SEND_EVENT_RESPONSE_ACTION)
    .map(toPayload)
    .switchMap((payload) => this.myService.eventResponse(payload.eventId,payload.response))
    .map(data => new SentEventResponseAction(data))
    .catch((error) => Observable.of(new ErrorOccurredAction(error)));

Спасибо

1 6

1 ответ:

Похоже, произошла ошибка. В этой ситуации действие в наблюдаемом, возвращаемое catch, будет излучено в поток эффекта, и эффект завершится - что предотвратит запуск эффекта после того, как действие ошибки будет излучено.

Переместите map и catch в switchMap:

@Effect() event_response$ = this.action$
  .ofType(SEND_EVENT_RESPONSE_ACTION)
  .map(toPayload)
  .switchMap((payload) => this.myService
    .eventResponse(payload.eventId, payload.response)
    .map(data => new SentEventResponseAction(data))
    .catch((error) => Observable.of(new ErrorOccurredAction(error)))
);

Составление catch внутри switchMap предотвратит завершение эффекта, если произойдет ошибка.