Как сделать один сервисный запрос при поиске двух документов в Angular вместо двух?

Я ищу документы, которые удовлетворяют заданным критериям. Здесь я ищу 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;
});

}

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

Спасибо!

один из способов - установить время ожидания, чтобы переменная получила значение в течение заданного времени, а затем передала его службе запросов.

Hameed Syed 29.01.2019 06:23
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
1
1
44
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

forkjoin: This operator is best used when you have a group of observables and only care about the final emitted value of each. One common use case for this is if you wish to issue multiple requests on page load (or some other event) and only want to take action when a response has been received for all.

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];
   });
}

Проверьте этот работающий стекблиц. Подробнее о forkjoin здесь.

Я не понимаю смысла использовать здесь forkJoin(), так как мы снова делаем два запроса к сервису.

user9718365 29.01.2019 07:11

Что вы имеете в виду под "сделать запрос"? Это количество обращений к методу getSubmissions вашей службы?

Senal 29.01.2019 07:26

Если это так, вам придется изменить реализацию метода getSubmissions, чтобы он принимал массив типов и возвращал результат по типу.

Senal 29.01.2019 07:41

Другие вопросы по теме