如何在Angular中搜索两个而不是两个文档时提出一个服务请求?

时间:2019-01-29 04:50:04

标签: angular typescript rxjs angular-services

我正在搜索满足给定条件的文档。在这里,我通过订阅两个不同的请求来搜索存储在两个不同变量中的surveysexams

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 :(得分:2)

您可以在rxjs中使用forkjoin

  

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 here.

的更多信息