【发布时间】:2021-07-21 15:29:58
【问题描述】:
我有一段代码需要重构,因为它是链式订阅的地狱。
ngOnInit(): void {
this.dossierService.getIdTree()
.subscribe(idTree => {
this.bootstrappingService.refreshObligations(idTree)
.subscribe(() => {
this.dossierPersonsService.retrieveDossierPersons(idTree)
.subscribe(debtors => {
this.retrieveObligations();
this.debtors = debtors;
});
});
});
}
- 第一次调用
dossierService.getIdTree()检索idTree,该idTree被除obligationsService.retrieveObligations()之外的其他服务使用。 - 所有服务方法都应该按照它们现在执行的顺序执行。但是
retrieveDossierPersons和retrieveObligations可以并行执行。 -
retrieveObligations()是订阅另一个 observable 的方法。此方法用于其他几种方法。
我已经对其进行了重构,它似乎可以工作。但是我是否以适当的方式对其进行了重构,或者我的代码可以改进?
this.dossierService.getIdTree()
.pipe(
map(idTree => {
this.idTree = idTree;
}),
switchMap(() => {
return this.bootstrappingService.refreshObligations(this.idTree)
}),
switchMap(
() => {
return this.dossierPersonsService.retrieveDossierPersons(this.idTree)
},
)
)
.subscribe(debtors => {
this.retrieveObligations();
this.debtors = debtors;
});
【问题讨论】:
-
我不是
map的这种用法的忠实拥护者 - 它在这里起到了副作用的作用。你的意思是tap吗?
标签: javascript angular rxjs