Я создаю кладку в реальном времени для изображений, используя Angularfire2 и Firebase.Я установил максимальный предел для того, сколько историй должно отображаться в html. Желаемое поведение: Данные поступают с firebase с помощью angularfire2 в режиме реального времени внешнего интерфейса (работает).Данные хранятся в массиве объектов, который отображается в html (работает).
Если новые данные, полученные в потоке, превышают лимит (рабочий), запустите функцию, чтобы вытолкнуть последний элемент в массиве и удалить его из базы данных (не работает).Таким образом, предполагая, что предел равен 5: если наблюдается объект № 6, удалите последний индекс из массива, сделав объект № 6 первым объектом в индексе массива.
Получение данных из службы:
public get curatedStoriesFromDB(): Observable<any> {
const dbRef = this.db.list<any>(this.dbBaseRef,
ref => ref.orderByChild('isMarked').equalTo(true).limitToLast(100));
return dbRef.valueChanges();
}
Возвращает мне наблюдаемое, на которое я подписываюсь в моем фид-компоненте:
dbData = new BehaviorSubject<any>(null);
storiesData = this.dbData.asObservable();
const dbRef = this.dbSrv.curatedStoriesFromDB
.pipe(catchError(err => of(err)))
.subscribe((data) => {
this.dbData.next(data);
console.log(this.dbData.getValue())
//the code to check if the limit is exceeded
if (data.length > (this.maxStories + 2)) {
console.log('Too many stories')
this.resetArraySize(data);
}
})
И функция ограничения:
resetArraySize(stories: any[]) {
const $stories = stories;
while ($stories.length > (this.maxStories + 2)) {
const shifted = $stories.pop();
this.dbSrv.removeStoryFromFeed(shifted);
this.dbData.next($stories)
}
return $stories;
}
Я разворачиваю данныев моем HTML компоненте так:
...*ngFor="let story of (storiesData | async); let i = index;" id={{i}};>