angular - 使用 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;
}
);
解决方案
试试下面的方法:
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
。在您的示例中,我想我会切换concatMap
,switchMap
尽管对于您的示例来说,使用这 3 个中的任何一个都可以解决问题。
https://blog.angular-university.io/rxjs-higher-order-mapping/
推荐阅读
- ios - ios UIImage 超出 UIImageView 边框
- laravel - 将代码重构为与数据库无关
- sql - 使用 has_many 的关联命令:通过 Ruby on Rails 中的关联
- algorithm - 给定一组 n 个整数,列出所有可能的子集,其中 k1<= sum <=k2 , k1 和 k2 浮点数
- java - 将 Android API 从 27 降级到 21 (KOTLIN) 后出错
- ubuntu - CMUSphinx-go PortAudio 错误:设备不可用
- laravel - Laravel 5 使用 2 个数据库连接加入 2 个表
- python - 在python中随机化快速排序,递归问题
- android - google/android/gms/maps/model/LatLng 的 NoSuchMethodError
- report - 使用 Oracle APEX 5 编辑交互式报表中的行