等待地图中的内部订阅



当我尝试在函数内部订阅时map可观察量不会等待内部订阅执行。

我有福洛翼:

        return this.http.get(url).map((project)=>{       
             // replace pilot id by pilot object 
             this.UserService.retrieveObject(project.pilot).subscribe(pilot => { 
                 project.pilot = pilot,
             })
             //replace owner id by owner object
             this.UserService.retrieveObject(project.owner).subscribe(owner => { 
                 project.owner = owner,
             })
             return project;
         });

返回的 project 对象包含所有者和试点 ID,而不是对象,因为它不等待订阅。

如何使可观察的等待所有内部订阅完成?

您需要对此进行大量重构。

您可以使用forkJoin等待两个可观察量完成,然后使用其"投影"功能更新project对象:

return this.http.get(url)
    .mergeMap(project => Observable.forkJoin(
        this.UserService.retrieveObject(project.pilot),
        this.UserService.retrieveObject(project.owner),
        (pilot, owner) => {
            project.pilot = pilot;
            project.owner = owner
            return project;
        }
    ));

最新更新