首页 > 解决方案 > 使用 concatMap 对多个 observables 进行排序

问题描述

我正在尝试使用 RxJS concatMap 对我的 2 个 observables 进行排序,以便它在调用服务以返回要绑定到 Angular 9 中的 Mat-Table 的对象之前返回 employeeID。但我不确定如何正确编写语法. 第一个 observable 实际上是我创建的一个行为主体,用于让组件订阅应用程序中的任何位置。第二个是来自 web api 的 http 响应。

我一直在看这里的例子并试图弄清楚,但只是在敲击键盘。 RxJS concatMap

//first observable (actually a Behavior Subject)
this.userService.currentEmployeeId.subscribe(empId => this.employeeID = empId)

//second observable
this.service.getMissingContractsSummary(this.employeeID)
.subscribe(
  response => {        
    this.dataSource = new MatTableDataSource<Contractsummary>(response);
    this.dataSource.paginator = this.paginator;
  }
);

标签: angularrxjsangular2-observables

解决方案


试试下面的方法:

import { concatMap } from 'rxjs/operators';

this.userService.currentEmployeeId.pipe(
   concatMap(empId => this.service.getMissingContractsSummary(empId)),
).subscribe(response => {
  this.dataSource = new MatTableDataSource<Contractsummary>(response);
  this.dataSource.paginator = this.paginator;
});

concatMap, switchMap,之间有区别mergeMap。在您的示例中,我想我会切换concatMapswitchMap尽管对于您的示例来说,使用这 3 个中的任何一个都可以解决问题。

https://blog.angular-university.io/rxjs-higher-order-mapping/


推荐阅读