Проблема здесь в основном из-за 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 является хорошим выбором, но он ожидает окончания предыдущей подписки, поэтому это звучит как хороший выбор.Все отлично работает.