【发布时间】:2020-06-19 05:11:46
【问题描述】:
一段时间以来,我一直在尝试组合多个异步调用,每次接近时,我都会陷入我试图解决的 foreach 循环中。
目前,我将一个类别数组传递给一个函数,该函数将返回一个包含所有问题(所有类别组合)的数组的 observable。
我在想
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?
});
}
然后我就可以像这样使用它了:
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);
})
);
这与我在my previous question 上的推荐非常接近。我想将此添加到我原来的问题中,但我觉得这不是正确的做法,因为我不再为嵌套的可观察对象而苦苦挣扎,而是在循环它们。
编辑
尝试了其他方法,但我怀疑这是正确的方法
getQuestions(categories: Category[]): Observable<Question[]> {
let ques = categories.map(c =>
this.cs.getQuestionsCategory(this.auth.token, c.id)
);
return merge(...ques);
}
【问题讨论】:
标签: angular loops foreach rxjs observable