2016-11-21 68 views
0

我有以下代碼:嵌套觀測訂閱

getUsers() { 
    this.af.database.list(DB_URL) 
    .map((users) => { 
     return users.map((user) => { 
     user.data = this.af.database.object(DB_URL_2).take(1); 
     return user; 
     }); 
    }) 
    .take(1) 
    .subscribe((itemPrefs) => { 
     this.users = users; 
    }) 
    } 

它返回users陣列,其中user.data是可觀察到的(用戶信息)。

如何將user的數據作爲對象返回而不作爲可觀察對象?我想訂閱我的user.data但它仍然返回觀察到:

return users.map((user) => { 
      user.data = this.af.database.object(DB_URL_2).take(1) 
.subscribe((data) => { 
return data; 
}); 
     return user; 
     }); 

回答

1

我覺得selectMany應該做的伎倆, selectMany(RxJS4)內的各個功能 mergeMap(RxJS 5)將返回observable即會扁平化。這意味着它將確保所有內部data會變平。

代碼

getUsers() { 
    this.af.database.list(DB_URL) 
    .mergeMap((user, i) => { 
     return this.af.database.object(DB_URL_2).take(1).map(data => { 
      user.data = data; 
      return user; 
     }); 
     }); 
    }) 
    .take(1) 
    .subscribe((itemPrefs) => { 
     this.users = users; 
    }) 
} 
+0

任何想法,我怎麼能在Angualr 2導入'selectMany'操作?我嘗試了'import'rxjs/add/operator/selectMany';' – TheUnreal

+0

@TheUnreal我猜想它會是'import {Observable} from'rxjs/Observable'' –

+0

'屬性'selectMany'不存在於類型'FirebaseListObservable ' ' – TheUnreal