在地图内等待内部订阅?

时间:2018-03-09 12:55:09

标签: angular rxjs reactive-programming

当我尝试在map函数内部进行订阅时,observable不会等待内部订阅执行。

我有以下内容:

        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而不是对象,因为它不等待订阅。

如何让observable等待所有内部订阅完成?

1 个答案:

答案 0 :(得分:3)

您需要对此进行重大修改。

您可以使用forkJoin等待两个Observable完成,然后使用其"投影"更新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;
        }
    ));
相关问题