Я пишу функцию для добавления записи (цитаты) в Firebase, но хочу ограничить количество записей до 3. Функция показана ниже:
addQuote(q) {
this.angularFireDatabase.list(this.getUserPath('/savedQuoteList')).valueChanges().subscribe( data => {
console.info("Length = "+data.length);
if (data.length<3){
this.angularFireDatabase.list(this.getUserPath('/savedQuoteList')).push(q);
console.info("Quote saved.");
} else {
console.info("Too many quotes in list.");
}
});
}
Когда длина списка равна 3, функция указывает, что в списке слишком много кавычек, что является ожидаемым поведением. Однако, если я теперь вручную удаляю некоторые записи в Firebase, функция добавляет обратно записи, которые я ранее не мог добавить, пока длина списка не станет 3 (или даже 4 в некоторых случаях).
Я знаю, что это должно быть потому, что я подписался на список, и поэтому его слушают. Я пробовал добавить .unsubscribe() в конец, но тогда записи вообще не добавляются. Как заставить его работать? Или есть более простой способ сделать это?
Я знаю, что это должно быть просто, но я еще не знаком с наблюдаемыми, поэтому мне нужна помощь. Большое спасибо.





Вы можете попробовать собственные методы firebase, чтобы проверить список
Первый import * as firebase from 'firebase';
firebase.database().ref(this.getUserPath('/savedQuoteList')).once("value")
.then(function(snapshot) {
console.info(snapshot.numChildren());
if (snapshot.numChildren()<3){
this.angularFireDatabase.list(this.getUserPath('/savedQuoteList')).push(q);
console.info("Quote saved.");
}else {
console.info("Too many quotes in list.");
}
});
Задача решена. Теперь я понимаю, что это проблема определения объема работ. Я сменил function(snapshot){...} на snapshot=>{...}, и теперь он работает.
Спасибо. Теперь работает. Одна небольшая проблема: когда я использую предложенный вами код,
thisвthis.angularFireDatabase.list(...)становится неопределенным. Я решил это, предварительно определив ссылкуafdRef = this.angularFireDatabase.list(...), а затем используя ссылку внутри. Итак, мой следующий вопрос: как я могу правильно ссылаться наthisвнутри кода.then{}?