如何构建依赖于其他 observables 的 observables?

用户3264740

我不确定我是否能够正确解释这一点:

我正在用 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 解析,你需要使用switchMapand 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章