我有50个科目,我发送了50个并行呼叫,每个科目返回1个或多个学生数据
例如:如果我发送一个subjectId,则this.subjectService.getStudentsData(subjectId)
它返回学生数据:
[
{StudentId:1,
"FirstName":'firstName',
"ListOfSubjects":[{Subjectid:1,SubjectName:'Maths', .....somedata:[{1:a,2:b...}, {3:y,2:x...}]}},
{
StudentId:2,
FirstName:secondName,
.
.
ListOfSubjects:[
{Subjectid:1,SubjectName:'Maths', .....somedata:[{c:1,d:2...}, {a:y,b:x...}]}}]
现在我需要绑定,因为我要通过用户数据来获取用户,但是要花15分钟才能完成所有服务调用
我用的是
const requests: any = subjectIds.map(id => {
const t: any = {...data};
t.SubjectId = [id];
return this.studentService.getStudentsData(t);
});
答案 0 :(得分:0)
像mamichels
所说的,您可以使用forkJoin
,但我记得读过forkJoin
最多只能进行6次,除非您可能使用dictionary
。
我会做的:
const requests: any = combineLatest(...subjectIds.map(id => this.studentService.getStudentData(id) /* you know what should go in the argument */)
...
requests.subscribe(responseArray => console.log(responseArray));
==========================编辑==================== =====
要通知每个请求已完成,我将使用merge
import { merge } from 'rxjs';
const requests: any = merge(...subjectIds.map(id => this.studentService.getStudentData(id));
....
requests.subscribe(response => { /* handle each response as it returns */ }));
=================好的,尝试旧的方式===============
for (let i = 0; i < subjectIds.length; i++) {
this.studentService.getStudentsData(subjectIds[i].StudentId/* again, I am not sure what goes here as argument */).subscribe(
response => {
console.log(response);
}
);
}