我需要多次订阅才能从Nosql数据库中获取正确的数据.为了获取特定项目的用户列表,我这样做:
ngOnInit() { //Subscription 1 (Service): Get project data this.projectService.getCurrentproject().take(1).subscribe(projectData => { console.log('Got project data.'); //Subscription 2: Get project user IDS this.af.database.list('/project_roles/'+projectData.$key) .subscribe((userMeta) => { }); }); }
>正如您所看到的,订阅中的订阅,订阅中的订阅..并且每个订阅取决于之前的订阅.
>订阅3和4可以是并行的.
解决方法
试试这个.
ngOnInit() { this.projectService.getCurrentproject().take(1) .flatMap(projectData => { return this.af.database.list('/project_roles/'+projectData.$key) }) .flatMap(userMeta => { let subs = userMeta.map(projectRole => { return Observable.zip([ this.af.database.object('/roles/'+projectRole.$value),this.af.database.object('/users/'+projectRole.$key) ]).map(([roleData,user]) => { user.role = roleData.$value; return Observable.of(user) }) }); return Observable.zip(subs) }) .subscribe(users => { this.users = users }) }