Я пытаюсь делать вложенные вызовы, используя rx js с вложенными ответвлениями. Однако я столкнулся с проблемой, когда внешний forkJoin перестает возвращать результат, когда внутренняя наблюдаемая имеет flatMap внутри.
Вот код для иллюстрации.
// Only returns a value when the flatMap statements are removed from the inner observables it is waiting for
searchAdmin(searchKey: string): Observable<[StudentAccountSearchResult[], InstructorAccountSearchResult[]]> {
return forkJoin(
this.getStudentAccountSearchResults(searchKey),
this.getInstructorAccountSearchResults(searchKey)
);
}
private getStudentAccountSearchResults(searchKey: string): Observable<StudentAccountSearchResult[]> {
return this.getStudents(searchKey).pipe(
map((students: Students) => students.students),
// Outer forkjoin in searchAdmin returns when I remove the line below
flatMap((studentsArray: Student[]) => forkJoin(studentsArray.map(student => this.createStudentAccountSearchResult(student)))),
);
}
private getInstructorAccountSearchResults(searchKey: string): Observable<InstructorAccountSearchResult[]> {
return this.getInstructors(searchKey).pipe(
map((instructors: Instructors) => instructors.instructors),
// Outer forkjoin in searchAdmin returns when I remove the line below
flatMap((instructorsArray: Instructor[]) => forkJoin(instructorsArray.map(instructor => this.createInstructorAccountSearchResult(instructor))))
)
}
Оба getStudentAccountSearchResults
и getInstructorAccountSearchResults
возвращают правильное значение, когда я подписываюсь на них напрямую, поэтому нет ошибок при отображении наблюдаемых. Кто-нибудь знает, почему flatMap в innerObservables заставляет внешний forkJoin перестать возвращать какие-либо результаты? Спасибо!
Я на rx js 6.4