我有三个服务,每个服务都进行一个简单的API调用,并将值返回给客户端,每个API调用都依赖于从另一个获取的某些数据。
像第一个Observable一样,我订阅了获取用户数据,然后使用从中获取的数据,我可以调用Observable,它通过传递从第一个Observable获得的两个值来获取参数,然后第三个Observable需要从第一个Observable获取一个相同的数据参数从第二个得到。
所以我的代码看起来像这样:
ngOnInit(): void {
this.profiloService
.profilo(this.idNegozio)
.subscribe((profilo: Profilo) => {
this.profilo = profilo;
this.menuService
.menu(profilo.idNegozio, profilo.piva, 'IT')
.subscribe((menu: Menu[]) => {
this.menu = menu;
this.pluService
.plu(profilo.idNegozio, profilo.piva, 'IT')
.subscribe((plus: Plu[]) => {
this.plus = plus;
this.filterPlu(menu.id);
});
});
});
}
从另一个可观察对象订阅可观察对象是一种好方法吗?如果不是,最好的做法是什么?
由于所有http调用都是连续的,并且您想在第3次调用中使用第一个http响应,因此您应按以下方式使用ConcateMap,
ngOnInit(): void {
this.profiloService.profilo(this.idNegozio)
.pipe(
concatMap((profilo: Profilo) => this.menuService.menu(profilo.idNegozio, profilo.piva, 'IT')
.pipe(
// you should be able to access profilo here
concatMap((menu: Menu[]) => this.pluService.plu(profilo.idNegozio, profilo.piva, 'IT')
.map((plus: Plu[]) => {
this.plus = plus;
this.filterPlu(menu.id);
})
)
)
).subscribe()
}
注意:请忽略任何括号错误
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句