/ / Без зміни перегляду після видалення вузла Firebase - javascript, angular, firebase, rxjs, angularfire2

Немає змін для перегляду після видалення вузла Firebase - javascript, angular, firebase, rxjs, angularfire2

Оновлення: Наступне питання стосується combineLatest не видаючи нічого, коли є порожній масивперейшов до нього. Це може не бути вашою проблемою конкретно, але якщо ваш вигляд не оновлюється після видалення або видалення вузла Firebase, перевірте обробку порожніх масивів вашими конкретними операторами. Як описано у рішенні, деяким подобається combineLatest нічого не випромінюють, коли отримують порожні масиви, що не призводить до змін у поданні.

Візьмемо наступний приклад:

doSomething(): Observable<any> {
let results = this.af.database.list(`path/to/something`)
.switchMap(data => {
let joinedObservables: any[] = [];
data.forEach(item => {
joinedObservables.push(this.af.database
.object(`path/to/something/else`)
.do(this => {
item.value = this.value;
})
)
})
return Observable.combineLatest(joinedObservables, () => data)
})
return results
}

... і порівняйте з цим прикладом:

doSomething(): Observable<any> {
let results = this.af.database.list(`path/to/something`)
.map(data => data.filter(data.poperty === predicate))
return results
}

або ще простіший приклад:

doSomething(): Observable<any> {
let results = this.af.database.list(`path/to/something`)
return results
}

У випадку першого прикладу, якщо ви відображаєте елемент у своєму поданні, наприклад {{data.property}} і видалити весь data вузол з Firebase, елемент, відображений у поданні, буде зберігатися у поданні. Іншими словами, він залишатиметься там, поки сторінка не буде перезавантажена.

В останніх двох прикладах елемент перестане відображатися в момент видалення спостережуваного об’єкта Firebase.

Чому?

Відповіді:

1 для відповіді № 1

У першому прикладі, коли ви видаляєте дані з бази даних, список видає порожній масив. Коли це отримано switchMap операція буде передано порожній масив combineLatest.

З пам'яті, коли combineLatest передається порожній масив, він нічого не видає. Якщо нічого не випускається, подання не бачить змін, тому раніше відтворені дані зберігаються.

Якщо вам потрібно було перевірити довжину отриманого масиву та випустити порожній масив, якщо такий отриманий, ви повинні побачити оновлений вигляд.

Перевіряючи довжину, я маю на увазі зробити щось подібне:

return joinedObservables.length ?
Observable.combineLatest(joinedObservables, () => data) :
Observable.of([]);