Javascript 当firebase中的密钥未知时,如何获取孩子的孩子
下面的代码使我能够返回当前用户的所有表达式。 在此示例中,控制台中显示以下表达式: 但我不知道如何为当前用户列出表达式下的所有标题。 预期的结果应该是: 基克,克曼Javascript 当firebase中的密钥未知时,如何获取孩子的孩子,javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,下面的代码使我能够返回当前用户的所有表达式。 在此示例中,控制台中显示以下表达式: 但我不知道如何为当前用户列出表达式下的所有标题。 预期的结果应该是: 基克,克曼 function f_returnUserDetails(a){ var key; var childData; return new Promise(function(resolve, reject) { //return promise firebase.database().ref('
function f_returnUserDetails(a){
var key;
var childData;
return new Promise(function(resolve, reject) { //return promise
firebase.database().ref('/users/').orderByChild("uid").equalTo(a).on('value', function (snapshot) {
snapshot.forEach(function(childSnapshot) {
key = childSnapshot.key;
childData = childSnapshot.val();
resolve([childData, childSnapshot.key]);
});
});
});
};
firebase.auth().onAuthStateChanged(function(user){
var user = firebase.auth().currentUser;
var uid = user.uid;
f_returnUserDetails(uid).then((dbItems) => {
console.log(dbItems[0].Expressions);
});
});
通过执行以下操作,您应获得请求的值:
firebase.database().ref('/users/').orderByChild("uid").equalTo(a).on('value', function (snapshot) {
snapshot.forEach(function (childSnapshot) {
key = childSnapshot.key;
childData = childSnapshot.val();
for (v of Object.values(childData.Expressions)) {
if (v.hasOwnProperty('title')) {
console.log(v.title);
}
}
});
});
通过执行以下操作,您应获得请求的值:
firebase.database().ref('/users/').orderByChild("uid").equalTo(a).on('value', function (snapshot) {
snapshot.forEach(function (childSnapshot) {
key = childSnapshot.key;
childData = childSnapshot.val();
for (v of Object.values(childData.Expressions)) {
if (v.hasOwnProperty('title')) {
console.log(v.title);
}
}
});
});
您必须构建表达式数组并在函数中返回它
function f_returnUserDetails(a){
return firebase.database().ref('/users/' + a + '/Expressions').once('value')
.then(snapshot => {
let expressions = [];
snapshot.forEach(childSnapshot =>{
let expression = childSnapshot.val();
expression.id = childSnapshot.key;
expressions.push(expression);
});
return expressions;
});
}
以后你可以这样做
f_returnUserDetails(uid).then((dbItems) => {
console.log(dbItems[0].title);
});
您必须构建表达式数组并在函数中返回它
function f_returnUserDetails(a){
return firebase.database().ref('/users/' + a + '/Expressions').once('value')
.then(snapshot => {
let expressions = [];
snapshot.forEach(childSnapshot =>{
let expression = childSnapshot.val();
expression.id = childSnapshot.key;
expressions.push(expression);
});
return expressions;
});
}
以后你可以这样做
f_returnUserDetails(uid).then((dbItems) => {
console.log(dbItems[0].title);
});
function f_returnUserDetails(a){var key;var childData;var title return new Promise(function(resolve,reject){firebase.database().ref('/users/')).orderByChild(“uid”).equalTo(a).on('value',function(snapshot){snapshot.forEach(function(childSnapshot){key=childSnapshot.key;childData=childSnapshot.val();title=childSnapshot.val().title;resolve([childData,childSnapshot.key,title]);});};
`firebase.auth().onAuthStateChanged(函数(用户){var user=firebase.auth().currentUser;var uid=user.uid;f_returnUserDetails(uid).然后((dbItems)=>{console.log(dbItems[2]);});`问题是title
不是表达式的子节点,而是子节点。函数f_returnUserDetails(a){var key;var childData;var title返回新承诺(函数(resolve,reject){firebase.database().ref('/users/')).orderByChild(“uid”).equalTo(a).on('value',函数(snapshot){snapshot.forEach(函数(childSnapshot){key=childSnapshot.key;childData=childSnapshot.val();title=childSnapshot.val().title;resolve([childData,childSnapshot.key,title]);});};
`firebase.auth().onAuthStateChanged(函数(用户){var user=firebase.auth().currentUser;var uid=user.uid;f_returnUserDetails(uid)。然后((dbItems)=>{console.log(dbItems[2]);}}问题是title
不是Expressions
的子节点,而是一个子节点。这会导致一个错误Uncaught(in promise)TypeError:无法读取f_returnUserDetails处undefined的属性'title'。
我忘记了“Expressions”部分。我已经更新了答案。这导致一个错误未捕获(承诺中)类型错误:无法读取f_returnUserDetails处未定义的属性“title”。然后
我忘记了“表达式”部分。我已经更新了答案