Update:
Проблемы, я сталкивался с полями пустых значений пришлось делать с несуществующими ключами в моей базе данных, поэтому большая часть речи не будет применяться к вашему вопрос. Если вы ищете способ «присоединиться» к запросам в AngularFire2, принятый ниже ответ прекрасно справляется с этим. В настоящее время я использую combineLatest
вместо forkJoin
. Для этого вам нужно import 'rxjs/add/observable/combineLatest';
.«Объединение» Firebase запросов в Angularfire2
У меня есть следующая денормализованный Firebase структура:
members
-memberid1
-threads
-threadid1: true,
-threadid3: true
-username: "Adam"
...
threads
-threadid1
-author: memberid3
-quality: 67
-participants
-memberid2: true,
-memberid3: true
...
Я хочу, чтобы сделать username
в моем threads
зрения, которая сортируется по quality
.
Моя служба:
getUsername(memberKey: string) {
return this.af.database.object('/members/' + memberKey + '/username')
}
getFeaturedThreads(): FirebaseListObservable<any[]> {
return this.af.database.list('/threads', {
query: {
orderByChild: 'quality',
endAt: 10
}
});
}
Мой компонент:
ngOnInit() {
this.threads = this.featuredThreadsService.getFeaturedThreads()
this.threads.subscribe(
allThreads =>
allThreads.forEach(thisThread => {
thisThread.username = this.featuredThreadsService.getUsername(thisThread.author)
console.log(thisThread.username)
})
)
}
По какой-то причине это регистрирует то, что выглядит как невыполненных наблюдаемыми на консоль.
Я хотел бы получить эти значения в свойстве threads
, так что я могу сделать его на мой взгляд, как это:
<div *ngFor="let thread of threads | async" class="thread-tile">
...
{{threads.username}}
...
</div>
Обновлено: console.log
для allThreads
и thisThread
Обновлено: подписка на GetUserName()
this.featuredThreadsService.getUsername(thisThread.author)
.subscribe(username => console.log(username))
Результатом этого является объекты без каких-либо значений:
Ваших Метод getUsername не возвращает ничего. Это предназначено? – echonax
Приношу свои извинения. Это остаток от другой реализации. Я изменил его. Текущий метод ведет себя так, как я описываю в своем вопросе. –
Можете ли вы поставить console.log для 'allThreads' и' thisThread', чтобы убедиться, что они определены? – echonax