Мой эффект Angular ngrx / store не срабатывает - PullRequest
0 голосов
/ 13 октября 2018
  1. У меня есть угловой магазин
  2. Я отправил Действие, однако эффект не срабатывает.
  3. Что могло вызвать это?

Ответы [ 2 ]

0 голосов
/ 13 октября 2018

Эффект всегда получает одно действие и запускает другое для редуктора.Попробуйте добавить новое действие в ваш catchError раздел.

  @Effect()
  getToDos$: Observable<Action> = this.actions$.pipe(
    ofType(ToDoActionTypes.GetAllToDo),
    switchMap(() =>
      this.api.getTodos().pipe(
        map(todos => new GetAllToDoSuccess(todos)),
        catchError(err => of(new ErrorToDo(err)))
      )
    )
  );
0 голосов
/ 13 октября 2018

Эффекты будут отключены, если они завершены, точно так же, как Observable никогда не сработает снова, если он завершится.

Основная причина неожиданного завершения эффекта - необработанная ошибка.Наиболее распространенной причиной необработанной ошибки является невозможность обработки HTTP-ответа, не относящегося к 2xx (например, не 200).

Вот пример того, как это следует сделать:

mergeMap(value => {
  // essential to catchError else an HTTP error response will disable this effect
  return this.myService.makeHttpRequest(value).pipe(
    catchError(() => {
      return of({}) // in the event of an error the value {} is passed down the pipe
    })
  )
})

InПриведенный выше код, если HTTP-запрос не выполняется по какой-либо причине, ошибка обрабатывается и @Effect не отключается.

...