gpt4 book ai didi

angular - 在另一个可观察对象中调用一个可观察对象是否正确?

转载 作者:行者123 更新时间:2023-12-02 19:20:33 24 4
gpt4 key购买 nike

我有三个服务,每个服务都会进行一个简单的 API 调用并将值返回给客户端,每个 API 调用都依赖于从其他服务获取的一些数据。

像第一个Observable一样,我订阅了获取用户数据,然后使用从中获取的数据,我可以调用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 调用都是连续的,并且您希望在第三次调用中使用第一个 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()

}

注意:请忽略任何括号错误

关于angular - 在另一个可观察对象中调用一个可观察对象是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63119256/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com