当我尝试在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等待所有内部订阅完成?
答案 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;
}
));