Различия между 'child_added' и 'value' firebase?
Я вижу небольшую разницу междуchild_added
а такжеvalue
при возврате данных в firebase. С помощьюvalue
Я могу проверить, еслиsnapshot.val()
возвратил что-то или не использовал это так:
Получение данных:
ref.orderByChild('appUserName')
.equalTo(issuer)
.once('value')
.then(function (snapshot) {
var value = snapshot.val();
if (value) {
// Has Value...
}else{
//Has No Value...
}
Структура данных:
AppUsers --
234jl23jl4kj23 --
data --
//.. data
userName : "testUser1",
userPass: "password123"
9873h23foiu34u
//same structure
o8987s52df134o
//same structure
Если яconsole.log
как значение вернулосьsnapshot.val()
возвращает данные на уровне сгенерированного ключа:
{234jl23jl4kj23 --
{data --
//.. data
userName : "testUser1",
userPass: "password123"}}
Если я получу данные, используяchild_added
:
ref.orderByChild('appUserName')
.equalTo(issuer)
.once('child_added')
.then(function (snapshot) {
var value = snapshot.val();
if (value) {
// Has Value...
}else{
//Has No Value...
}
Это даже не пойдет в.then
функционировать, еслиissuer
не найден в качестве значения дляappUserName
, поэтому я не могу видеть в функции Firebase, получил ли он значение или нет. Также способchild_added
получает данные на один уровень глубже. Вместо возврата по сгенерированному ключу он возвращает значения в этом ключе:
{data --
//.. data
userName : "testUser1",
userPass: "password123"}
Я бы предпочел использовать его таким образом, потому что это был бы на один цикл меньше, который я должен был бы проверить, чтобы сначала получить данные внутри ключа, а затем перебрать объекты в области данных. Однако еслиissuer
не вappUserName
это не будет входить в функцию для меня, чтобы даже сделатьif
else
Есть ли способ, чтобы сверлить так глубоко, какchild_added
без зацикливания, но все еще сможет сделатьif else
проверить, еслиsnapshot.val()
есть что-нибудь?