如何合并多个 Observable 响应
How to merge multiple Observable responses
我正在尝试将来自 Observables 的多个响应合并到一个流中。我正在获取 companies
,每个公司都有多个 inspections
(存储为 ID)。对于每个 inspection
我必须获取相应的数据。
这是我的代码目前的样子。请查看当前结果的注释部分。
// Get companies
getCompanies().pipe(
switchMap(companies => companies.map(
company => {
return company['inspections'].map(inspection => {
// Get inspections by each company
return this.getInspectionById(inspection['id']);
})
}
))
).subscribe(result => {
/*
console.log(result) returns the following (company1 has two inspections, company2 has three
inspections):
(2) [Observable, Observable]
0: Observable
1: Observable
(3) [Observable, Observable, Observable]
0: Observable
1: Observable
2: Observable
*/
});
如您所见,我的订阅目前 returns 只有 Observables。我想我只是缺少合并数据流的部分,我尝试了不同的运算符,如 mergeMap、combineLatest、forkJoin 等,但没有找到合适的。
我想要的输出是这样的(与上面完全相同,但是是真实数据而不是可观察数据):
company1:
company_data: ...
inspections: [a, b]
company2:
company_data: ...
inspections: [a, b, c]
有人知道要使用哪个运算符以及如何使用吗?
提前致谢!
如果我理解你的问题,我认为你对你的方法感到困惑。据我了解,您的可观察对象中有可观察对象。您订阅您的包装器可观察对象并正确获取内部可观察对象。现在你需要这些的价值。为此,这可能会有所帮助:.
您可能正在为这种情况寻找 forkJoin
运算符,如下所示
getCompanies().pipe(
switchMap(companies => forkJoin(
companies.map(company => forkJoin(
company['inspections'].map(inspection =>
this.getInspectionById(inspection['id'])
)
).pipe(
map(inspections => ({...company, inspections }))
)
)
))
)
forkJoin
会将可观察数组和 return 组合成一个单独的 Observable
我正在尝试将来自 Observables 的多个响应合并到一个流中。我正在获取 companies
,每个公司都有多个 inspections
(存储为 ID)。对于每个 inspection
我必须获取相应的数据。
这是我的代码目前的样子。请查看当前结果的注释部分。
// Get companies
getCompanies().pipe(
switchMap(companies => companies.map(
company => {
return company['inspections'].map(inspection => {
// Get inspections by each company
return this.getInspectionById(inspection['id']);
})
}
))
).subscribe(result => {
/*
console.log(result) returns the following (company1 has two inspections, company2 has three
inspections):
(2) [Observable, Observable]
0: Observable
1: Observable
(3) [Observable, Observable, Observable]
0: Observable
1: Observable
2: Observable
*/
});
如您所见,我的订阅目前 returns 只有 Observables。我想我只是缺少合并数据流的部分,我尝试了不同的运算符,如 mergeMap、combineLatest、forkJoin 等,但没有找到合适的。
我想要的输出是这样的(与上面完全相同,但是是真实数据而不是可观察数据):
company1:
company_data: ...
inspections: [a, b]
company2:
company_data: ...
inspections: [a, b, c]
有人知道要使用哪个运算符以及如何使用吗? 提前致谢!
如果我理解你的问题,我认为你对你的方法感到困惑。据我了解,您的可观察对象中有可观察对象。您订阅您的包装器可观察对象并正确获取内部可观察对象。现在你需要这些的价值。为此,这可能会有所帮助:
您可能正在为这种情况寻找 forkJoin
运算符,如下所示
getCompanies().pipe(
switchMap(companies => forkJoin(
companies.map(company => forkJoin(
company['inspections'].map(inspection =>
this.getInspectionById(inspection['id'])
)
).pipe(
map(inspections => ({...company, inspections }))
)
)
))
)
forkJoin
会将可观察数组和 return 组合成一个单独的 Observable