Ale*_*TGM 6 rxjs typescript angular
我想允许用户传递 ids 来获取一些过滤后的数据。为此,我创建了一个允许发送 Guid 数组的主题:
selectedVacancies: Subject<string[]> = new Subject();
selectedVacancies.next(['a00652cd-c11e-465f-ac09-aa4d3ab056c9',
'f145b6a6-0a66-49d6-a2d2-eb9123061d96']);
Run Code Online (Sandbox Code Playgroud)
我有另一个可观察的对象,它订阅了该主题并等待数据到来(availableVacancies 和 availableVacancyTypes 只是我的角度服务中的 Observable 和 Observable):
filteredVacancyTypes: Observable<VacancyTypeModel[]>;
filteredVacancyTypes = this.selectedVacancies
.flatMap(vacancyIds => vacancyIds)
.filter(id => !isNullOrUndefined(id))
.flatMap(id => this.availableVacancies.first(v => v.id === id))
.flatMap(v => this.availableVacancyTypes.filter(vt => vt.id === v.type.id))
Run Code Online (Sandbox Code Playgroud)
我想累积过滤后的数据并将其作为 VacancyTypeModels 数组返回。我知道存在什么 toArray 方法,但我无法使用它,因为主题永远不会完成(因为我必须等待用户发布另一个 id)
是否有任何方法可以在不完成源的情况下将数据作为数组返回?
操作员可以轻松积累物品scan:
filteredVacancyTypes = this.selectedVacancies
.scan((acc, arr) => [...acc, ...arr], [])
.flatMap(vacancyIds => vacancyIds)
...
Run Code Online (Sandbox Code Playgroud)
发出scan每个中间结果。您也可以在完成所需的所有逻辑后使用它:
filteredVacancyTypes = this.selectedVacancies
.flatMap(vacancyIds => vacancyIds)
...
.scan((acc, val) => [...acc, val], [])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2971 次 |
| 最近记录: |