当我尝试在函数内部订阅时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;
}
));