gpt4 book ai didi

Angular 6 管道 RxJs 运算符链接 3 个相关的可观察对象

转载 作者:太空狗 更新时间:2023-10-29 17:04:56 24 4
gpt4 key购买 nike

我有 3 个依赖的 Rest API 资源(比如说可观察对象),如下所示:

第一个可观察对象生成一个项目作为用户数组,如下所示:

getUsers(): Observable<User[]>
[
{
"id": 1,
"name": "Peter",
"surname": "Smith"
},
{
"id": 2,
"name": "John",
"surname": "Wayne"
},
...
]

第二个 observable 可用于获取分配给用户的地址,因此输入参数是用户 ID,并返回一个地址数组的一项:

getUserAddresses(user_id: string): Observable<Address[]>
[
{
"id": 1,
"city": "London",
"street": "Wicombe 34"
},
{
"id": 2,
"city": "Paris",
"street": "La fever 20"
},
...
]

第三个可观察对象可用于获取分配给用户的公司,因此输入参数是用户 ID,并返回一个项目作为公司数组:

getUserCompanies(user_id: string): Observable<Company[]>
[
{
"id": 1,
"name": "Fintch CO",
"state": "France"
},
{
"id": 2,
"name": "C&C inc.",
"state": "USA"
},
...
]

我想将这 3 个 observables 链接成一个,它将再次作为一个项目产生结果,它将包含用户数组及其附加地址数组和公司数组,如下所示:

    [
{
"id": 1,
"name": "Peter",
"surname": "Smith",
"addreesses":
[
{
"id": "1",
"city": "London",
"street": "Wicombe 34"
},
{
"id": "2",
"city": "",
"street": "La fever 20"
}
],
"companies":
[
{
"id": "1",
"name": "Fintch CO",
"state": "France"
},
{
"id": "2",
"name": "C&C inc.",
"state": "USA"
}
]
}
},
{
"id": 2,
"name": "John",
"surname": "Wayne",
"addresses": [...],
"companies": [...],
},
...
]

在使用 RxJs 6 的 Angular 6 中,运算符组合应该如何实现?非常感谢您的建议。

最佳答案

这样的东西可以工作

getUsers()
.pipe(
switchMap(users => from(users)),
mergeMap(user => forkJoin(getAddresses(user.id), getCompanies(user.id))
.pipe(map(data => ({user, addresses: data[0], companies: data[1] })))
tap(data => data.user.addresses = data.addresses),
tap(data => data.user.companies = data.companies),
map(data => data.user),
toArray()
)
)

应用于不同的用例,更详细地解释了类似的链here .

关于Angular 6 管道 RxJs 运算符链接 3 个相关的可观察对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51210629/

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