Javascript Firebase JS阵列失去作用域
Firebase数据如下所示Javascript Firebase JS阵列失去作用域,javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,Firebase数据如下所示 -users --demo1 ---conid:1 -election --election1 ---conRegex:1 --election2 ---conRegex:1 检索election1、election2的代码为 var conid; var conRegex; var electionArr = []; if(uidAnonymous != null) { db.ref('users/'+user).once
-users
--demo1
---conid:1
-election
--election1
---conRegex:1
--election2
---conRegex:1
检索election1、election2的代码为
var conid;
var conRegex;
var electionArr = [];
if(uidAnonymous != null) {
db.ref('users/'+user).once('value', function(snapshot) {
if(snapshot.exists()) {
conid = snapshot.val().conid;
}
});
db.ref('election/').once('value', function(snapshot) {
snapshot.forEach(function(electionSnapshot) {
conRegex = electionSnapshot.val().conRegex;
if(conid.startsWith(conRegex)) {
electionArr.push(electionSnapshot.key.toString());
}
});
});
console.log(electionArr);
}
问题是选举人是空的吗?如何解决该问题Firebase函数调用是异步的。这就是它的工作原理,您不能在函数调用中从firebase
内部的范围外分配数组。使数组在函数中可用一次(值)
var conid;
var conRegex;
if(uidAnonymous != null) {
db.ref('users/'+user).once('value', function(snapshot) {
if(snapshot.exists()) {
conid = snapshot.val().conid;
}
});
db.ref('election/').once('value', function(snapshot) {
var electionArr = [];
snapshot.forEach(function(electionSnapshot) {
conRegex = electionSnapshot.val().conRegex;
if(conid.startsWith(conRegex)) {
Object.keys(electionSnapshot.val()).map(k => {
electionArr.push(electionSnapshot.val()[k]);
})
}
});
console.log(electionArr);
});
}
Firebase函数调用是异步的。这就是它的工作原理,您不能在函数调用中从firebase内部的范围外分配数组。使数组在函数中可用一次(值)
var conid;
var conRegex;
if(uidAnonymous != null) {
db.ref('users/'+user).once('value', function(snapshot) {
if(snapshot.exists()) {
conid = snapshot.val().conid;
}
});
db.ref('election/').once('value', function(snapshot) {
var electionArr = [];
snapshot.forEach(function(electionSnapshot) {
conRegex = electionSnapshot.val().conRegex;
if(conid.startsWith(conRegex)) {
Object.keys(electionSnapshot.val()).map(k => {
electionArr.push(electionSnapshot.val()[k]);
})
}
});
console.log(electionArr);
});
}
once()
函数。读取所有数据时,您必须嵌套读取并将阵列记录到控制台:
var conid;
var conRegex;
var electionArr = [];
if(uidAnonymous != null) {
db.ref('users/'+user).once('value', function(snapshot) {
if(snapshot.exists()) {
conid = snapshot.val().conid;
db.ref('election/').once('value', function(snapshot) {
snapshot.forEach(function(electionSnapshot) {
conRegex = electionSnapshot.val().conRegex;
if(conid.startsWith(conRegex)) {
electionArr.push(electionSnapshot.key.toString());
}
});
console.log(electionArr);
});
}
});
}
once()
函数。读取所有数据时,您必须嵌套读取并将阵列记录到控制台:
var conid;
var conRegex;
var electionArr = [];
if(uidAnonymous != null) {
db.ref('users/'+user).once('value', function(snapshot) {
if(snapshot.exists()) {
conid = snapshot.val().conid;
db.ref('election/').once('value', function(snapshot) {
snapshot.forEach(function(electionSnapshot) {
conRegex = electionSnapshot.val().conRegex;
if(conid.startsWith(conRegex)) {
electionArr.push(electionSnapshot.key.toString());
}
});
console.log(electionArr);
});
}
});
}
我需要在if(uidAnonymous!=null)之外使用electionArr,那么我该怎么做呢?我已经编辑了代码。您需要映射返回的快照对象的键,并将值推送到Array。我已经编辑了代码。请告诉我数据现在是否进入electionArr,然后我们再试一次。因为我无法检查输出未获得预期结果,这就是SelectionSnapshot.key您所说的预期输出是什么意思。您是否在electionSnapshot.val()
中获取了值。我需要在if(uidAnonymous!=null)之外使用electionArr,那么我将如何执行该操作?我已经编辑了代码。您需要映射返回的快照对象的键,并将值推送到Array。我已经编辑了代码。请告诉我数据现在是否进入electionArr,然后我们再试一次。因为我无法检查输出未获得预期结果,这就是SelectionSnapshot.key您所说的预期输出是什么意思。您甚至在electionSnapshot.val()中获取值。