Зачем использовать ngrx/effects для асинхронных вызовов http

Существует множество статей, в которых рекомендуется использовать ngrx/effects для обработки асинхронных действий, таких как HTTP-вызовы REST. Вместо использования эффектов, почему мы не можем просто использовать обычную службу для выполнения http-вызова, а затем взять результат этого http-вызова и отправить действие? Разве это не упрощает дело?


person Ben Stills    schedule 05.01.2018    source источник


Ответы (2)


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

this.store.dispatch({
   type: "SAVE_DATA",
   payload: data
});
this.saveData(data) // POST request to server
   .map(res => this.store.dispatch({type: "DATA_SAVED"}))
   .subscribe()

@ngrx/effect просто абстрагирует эту логику от компонента. Делая это с помощью функционального программного подхода (чистые функции), код остается очень легко тестируемым.

Я очень рекомендую прочитать эту статью, так как есть много решений проблем, которые злоупотребляют effects

Публикация

person Guido Dizioli    schedule 29.11.2018

Использование ngrx/effects делает жизнь проще, чем использование службы для выполнения http-вызова, а затем получения результата и отправки действия. Как показано ниже

  1. Эффекты обеспечивают абстракцию уровня службы. Нашим компонентам не нужно знать о слое сервисов (http). Компоненты будут отправлять действия только для выполнения задач.

  2. Поскольку Эффекты в основном являются сервисом, код пишется один раз и многократно используется повторно.

person Deepak Bansode    schedule 10.01.2018
comment
Я не уверен, что согласен с вами в том, что ngrx/effects делает жизнь проще, чем использование сервиса. Операторы RxJS в ngrx/effects могут быть трудны для понимания. И размещение этой логики в сервисах или создателях действий также может сделать ее многоразовой. Я думаю, что нет реального ответа на этот вопрос, так как все это компромиссы, упомянутые в этой статье. goshakkk.name/redux-side-effect-approaches - person Ben Stills; 13.02.2018
comment
Это вряд ли делает вещи проще. На самом деле он явно сложнее. Мы могли бы использовать сервис в наших редьюсерах, который был бы проще. - person Trevor de Koekkoek; 03.05.2019