Как сделать асинхронные вызовы параллельными, не останавливая вызовы в очереди - PullRequest
1 голос
/ 05 марта 2020

У меня 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);
        });

1 Ответ

0 голосов
/ 05 марта 2020

Как и 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);
  }
);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...