Я ищу документы, которые удовлетворяют заданным критериям. Здесь я ищу 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;
});
}
Как сохранить две наблюдаемые в одном запросе на обслуживание вместо того, чтобы делать два отдельных запроса?
Спасибо!





Вы можете использовать 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(), так как мы снова делаем два запроса к сервису.
Что вы имеете в виду под "сделать запрос"? Это количество обращений к методу getSubmissions вашей службы?
Если это так, вам придется изменить реализацию метода getSubmissions, чтобы он принимал массив типов и возвращал результат по типу.
один из способов - установить время ожидания, чтобы переменная получила значение в течение заданного времени, а затем передала его службе запросов.