我不确定我是否能够正确解释这一点:
我正在用 angular4 编写数据服务:
getProjects(): Observable<Project[]> {
return some_observable.map((rawProjects: RawProject[]) => {
return rawProjects.map((rawProject: RawProject) => {
// do some processing
return new Project(...);
});
});
}
这工作正常。但是现在,我需要RawProject
从另一个返回 observable 的 API 获取ID并获取数据:
getProjects(): Observable<Project[]> {
return some_observable.map((rawProjects: RawProject[]) => {
return rawProjects.map((rawProject: RawProject) => {
const vendorID = rawProject.getVendorID();
getVendorInfo(vendorID) // returns Observable<VendorInfo>
return new Project(...);
});
});
}
getVendorInfo(vendorID)
返回Observable<VendorInfo>
,我不确定如何返回Project
需要包含VendorInfo
. 是否可以在VendorInfo
不更改方法签名的情况下包含在内?
如果你想等待所有的 observables 解析,你需要使用switchMap
and forkJoin
。对于属性的“合并”,您需要使用Object.assign
:
getProjects(): Observable<Project[]> {
return some_observable.switchMap((rawProjects: RawProject[]) => {
let arrayOfProjectsObservables = rawProjects.map((rawProject: RawProject) => {
const vendorID = rawProject.getVendorID();
return getVendorInfo(venodorID) // returns Observable<VendorInfo>
.map((vendorInfo: VendorInfo) => {
//do some processing
let project = new Project(rawProject);
return Object.assign(project, vendorInfo);
})
});
return Observable.forkJoin(arrayOfProjectsObservables);
});
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句