Я уже некоторое время пытаюсь объединить несколько асинхронных c вызовов, и каждый раз, когда я сближаюсь, я застреваю на foreach l oop Я пытаюсь решить.
В данный момент я передаю массив категорий в функцию, которая возвращает наблюдаемую информацию, содержащую массив всех вопросов (всех категорий вместе взятых).
Я думал о
getQuestions(categories: Category[]): Observable<Question[]> {
let q: Question[];
categories.forEach(c => {
this.cs
.getQuestionsCategory(c.id)
.pipe(map(questions => q.push(...questions)));
//return q somehow?
});
}
I тогда я смог бы использовать его так:
let result: Result;
let res: [Category[], Account, Answer[]];
return this.getResultByRouteParamId(route).pipe(
tap(resu => (result = resu)),
switchMap((result: Result) =>
this.forkJoinQuizCategoriesAccountAnswers(result)
),
tap(results => (res = results)),
switchMap(x => this.getQuestions(res[0])),
map(questions => {
// Create objects of questions, answers and category and add them to a QuestionAnswer object
// Return new UserResult containing the user and a list of QuestionAnswer objects
return new UserResult(null, null);
})
);
Это настолько близко, насколько я мог бы получить к чьей-либо рекомендации по моему предыдущему вопросу . Я хотел добавить это к моему первоначальному вопросу, но я чувствую, что это будет неправильно, поскольку я больше не борюсь с вложенными наблюдаемыми объектами, а скорее с их циклом.
РЕДАКТИРОВАТЬ
Пробовал что-то еще, но я сомневаюсь, что это правильный способ сделать это
getQuestions(categories: Category[]): Observable<Question[]> {
let ques = categories.map(c =>
this.cs.getQuestionsCategory(this.auth.token, c.id)
);
return merge(...ques);
}