Я пробовал некоторое время и много разных вещей, но я просто не могу найти решение, почему это
constructor(protected subjectService: SubjectsService,
protected userService: UsersService,
protected languageService: LanguageService,
protected translate: TranslateService,
protected gradeService: GradeService,
private store: Store<{ subjectGrades: SubjectGrade[], subject: Subject[] }>) {
if (this.userService.getLoggedInUser().admin) {
this.displayedColumns = ['subject', 'avgGrade', 'actions'];
}
this.subjects$ = this.store.select('subject');
this.subjectGrades$ = this.store.select('subjectGrades');
this.updateSubjectsAndAVGGrades();
}
updateSubjectsAndAVGGrades(): void {
this.subjects$
.pipe(
takeUntil(this.subscriptions),
switchMap((subjects: Subject[]) => {
this.subjects = subjects;
console.info('subjects', subjects);
return this.subjectGrades$.pipe(
takeUntil(this.subscriptions),
map((grades: SubjectGrade[]) => {
return subjects.map(subject => {
const subjectGrades = grades.filter(grade => grade.subject.id === subject.id);
return this.gradeService.calculateAvgGrades(subjectGrades);
});
})
);
})
)
.subscribe((avgGrades: Grade[]) => {
this.avgGrades = avgGrades;
});
}
каким-то образом есть случай, когда оценки или предметы не определены.
Я только что часами отлаживал свой Редуктор, Действие, Эффект, все данные передаются идеально. Я загружаю оба начальных состояния в AppComponent, начальные состояния основаны на http-выборке из серверной части.
Обнаружил проблему: когда я определял состояние в редукторе, иногда случалось, что из-за асинхронности передаваемые данные были неопределенными, поэтому массив оказывался неопределенным. Чтобы решить эту проблему, я добавил проверку на то, что если его неопределенное состояние превратится в пустой массив.
on(loadSubjectGradesSuccess, (state, {subjectGrades}) => {
if (subjectGrades === undefined) return state;
return subjectGrades;
}),
Как вы узнали, что они не определены? Вы, кажется, это регистрируете. Есть ли сообщение об ошибке? Можете ли вы привести минимальный пример?