Как вы правильно относитесь к наблюдаемому списку AngularFire? Я не уверен, как обрабатывать данные, как каждый ответ возвращает все элементы списка плюс нового (как «пирамида») -Как перебирать наблюдаемый список AngularFire?
first response: [{obj1}]
second response: [{obj1}, {obj2}]
third response: [{obj1}, {obj2}, {obj3}]
Я пытался реализовать два решения в моем коде, ни один из них не кажется правильным путем.
Первое решение использует карту rxjs - но она слишком чрезмерна, так как она итерации по всему ответу каждый раз.
getAllSchools(): Observable<any> {
return this.angularFire.database.list('schools').map((response) => {
return response.map(school => {
return \\do something to school\\
})
})
}
Это означает, что в приведенном выше примере (который перебирает schools
списке) «сделать что-то в школе» будет выполнен в school1
, затем снова school1
, и первый раз в school2
. Затем третий раз, чтобы school1
, второй раз к school2
, и впервые в school1
и т.д.
Второе решение, которое я пытался реализовать использовал preserveSnapshot
. Проблема здесь в том, что я не уверен, что он возвращает каждую часть данных один раз и один раз.
getAllSchools(): Observable<ISchool> {
return new Observable(observer => {
this.angularFire.database.list('schools', { preserveSnapshot: true })
.subscribe(snap => {
snap.forEach((school) => {
///do things to school///
observer.next(school)
})
})
})
}
Это очень фундаментальный вопрос, и я уверен, что решение очень «прост». Тем не менее, я не мог найти решение с четким разрезом.
Нужно ли использовать другую библиотеку, такую как one?
спасибо!
Звучит как этот вопрос: https://github.com/angular/angularfire2/issues/574 – cartant