Как сделать один сервисный запрос при поиске двух документов в Angular вместо двух? - PullRequest
0 голосов
/ 29 января 2019

Я ищу документы, которые удовлетворяют заданным критериям.Здесь я ищу surveys и exams, которые хранятся в двух разных переменных, подписавшись на два разных запроса.

getEntities() {

this.submissionsService.getSubmissions(findDocuments({
  'user.name': this.userService.get().name,
  type: 'survey',
   status: 'pending'
})).subscribe((surveys) => {
  this.surveys = surveys;
});

this.submissionsService.getSubmissions(findDocuments({
  'user.name': this.userService.get().name,
  type: 'exam',
  status: 'pending'
})).subscribe((exams) => {
  this.exams = exams;
});

}

Как сохранить две наблюдаемые в одном запросе на обслуживание вместо создания двухотдельные запросы?

Спасибо!

1 Ответ

0 голосов
/ 29 января 2019

Вы можете использовать forkjoin для этого в rxjs.

forkjoin : этот оператор лучше всего использовать, когда у вас есть группа наблюдаемых и вы заботитесь только об окончательно выпущенномценность каждого.Один из распространенных вариантов использования этого - это если вы хотите отправить несколько запросов при загрузке страницы (или по какому-либо другому событию) и хотите действовать только тогда, когда ответ получен для всех.

getEntites() {
   const surveysObservable = this.submissionsService.getSubmissions(findDocuments({
      'user.name': this.userService.get().name,
      type: 'survey',
      status: 'pending'
   }));

   const examsObservable = this.submissionsService.getSubmissions(findDocuments({
     'user.name': this.userService.get().name,
     type: 'exam',
     status: 'pending'
   }));

   Observable.forkJoin([surveysObservable , examsObservable]).subscribe(results => {

      this.surveys = results[0];
      this.exams = results[1];
   });
}

Оформить заказ это рабочий stackblitz .Подробнее о forkjoin здесь.

...