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