NgRx отправил недействительное действие - PullRequest
2 голосов
/ 25 марта 2019

Проблема здесь в основном из-за ofType ().У меня есть простое действие, когда пользователь отправляет тип, а затем запрос отправляется на сервер, в качестве ответа он возвращает массив объекта, который будет передан как новое отправленное действие.Проблема в том, что в новой версии ngrx нет возможности указать ofType () для действий $, потому что сначала нам нужно использовать pipe (), чтобы карты не обрабатывались в одном типе ...

Вот мойреализация:

@Effect()
    getGrades = this.actions$
    .pipe(
      ofType(StudentActions.TRY_SET_SUBJECTS),
      mergeMap((action: StudentActions.TrySetSubjects) => {
        const id = action.payload.id;
        return this.httpClient.get(`http://localhost:8080/api/v1/student/${id}/grades`)

      }),
      map((response: any[])  => {
        console.log('StudentEffects -> getGrades')
        const subjects: Subject[] = response

        return [
          new StudentActions.SetSubjects(subjects)
        ]
      })
    );

Вот как это будет работать с предыдущими версиями:

@Effect()
    getGrades = this.actions$
    .ofType(StudentActions.TRY_SET_SUBJECTS)
    .pipe(
      mergeMap((action: StudentActions.TrySetSubjects) => {
        const id = action.payload.id;
        return this.httpClient.get(`http://localhost:8080/api/v1/student/${id}/grades`)

      }),
      map((response: any[])  => {
        console.log('StudentEffects -> getGrades')

        const subjects: Subject[] = response

        return [
          new StudentActions.SetSubjects(subjects)
        ]
      })
    );

Как можно обрабатывать ответы и отправлять новые StudentActions.SetSubjects (субъектов) с новой версией?

Любая подсказка будет полезна, спасибо заранее.

РЕДАКТИРОВАТЬ

На самом деле была проблема с картами.Сначала я использовал mergeMap, а затем просто карту.Я изменил его на mergeMap и их concatMap.Не уверен, что concatMap является хорошим выбором, но он ожидает окончания предыдущей подписки, поэтому это звучит как хороший выбор.Все отлично работает.

1 Ответ

2 голосов
/ 25 марта 2019

Это то, что вы ищете?

enter image description here

...