gpt4 book ai didi

javascript - 'child_added' 和 'value' firebase 之间的区别?

转载 作者:数据小太阳 更新时间:2023-10-29 05:14:32 24 4
gpt4 key购买 nike

在 firebase 中返回数据时,我发现 child_addedvalue 之间存在一点点差异。使用 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"}

我更愿意以这种方式使用它,因为这样可以减少我必须检查的循环,首先获取 key 中的数据,然后循环遍历数据点中的对象。但是,如果 issuer 不在 appUserName 中,我什至无法执行 if else

有没有一种方法可以在不循环的情况下深入到 child_added 但仍然能够执行 if else 来检查 snapshot.val( ) 有什么吗?

最佳答案

child_added 事件会为您查询的节点下的每个匹配子节点触发。如果没有匹配的 child ,它不会触发。

这意味着要测试节点是否存在,您必须使用value 处理程序。由于一个查询可能有多个结果,因此您需要遍历子项。

关于javascript - 'child_added' 和 'value' firebase 之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40435190/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com