【发布时间】:2016-11-05 05:44:15
【问题描述】:
在 Firebase 中返回数据时,我发现 child_added 和 value 之间存在细微差别。使用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...
}
如果没有找到issuer 作为appUserName 的值,它甚至不会进入.then 函数,所以我无法在firebase 函数中看到它是否有值。 child_added 获取数据的方式也更深一层。它不是返回生成的键,而是返回该键中的值:
{data --
//.. data
userName : "testUser1",
userPass: "password123"}
我更喜欢以这种方式使用它,因为它会少一个循环,我必须先检查以首先获取键内的数据,然后循环遍历数据点中的对象。但是,如果issuer 不在appUserName 中,我什至不会进入函数if else
有没有办法在不循环的情况下钻入到child_added 的深度,但仍然能够执行if else 来检查snapshot.val() 是否有任何内容?
【问题讨论】:
标签: javascript firebase firebase-realtime-database