snapshot.val() returns 未定义,但记录正确。 Node.js 火力基地
snapshot.val() returns undefined, but it logs correctly. Node.js firebase
我不知道为什么,但是当我 return snapshot.val() 中的对象时,它不会 return 我前面的任何东西,但是当我 console.log () 它,它正确地显示了对象。我是这样 return 的:
function Loggear({ email, password }) {
db.ref("Usuarios")
.orderByChild("email")
.equalTo(email)
.on("child_added", (snapshot) => {
console.log(snapshot.val())
return snapshot.val();
});
}
它如何在 console.log() 上显示我的对象:
{
ciudad: 'Buenos Aires',
codigoPostal: '1000',
direccionCalle: 'la casa de tomas',
direccionNumero: '1',
documento: '1',
email: 'firebase@pruebita.com',
fechaNacimiento: '1111-01-01',
nombreCompleto: 'firebase',
password: 'contraseña',
telefonoCelular: '1233'
}
我认为这是因为您没有 returnLoggear 函数本身的任何值。添加的 on 子项的值仅 returned 到 Loggear 的范围。您必须从函数本身 return 它,即
function Loggear({ email, password }) {
return db.ref("Usuarios")
.orderByChild("email")
.equalTo(email)
.on("child_added", (snapshot) => {
console.log(snapshot.val())
return snapshot.val();
});
}
如果您只想获取一次数据,请使用once() instead of on(), as shown in the documentation。 on()
在某个数据库位置设置一个持久监听器,每当该位置发生变化时都会调用您的回调函数。那不是你想要的。而是使用 once()
,其中 returns 承诺通过数据快照解决:
function Loggear({ email, password }) {
return db.ref("Usuarios")
.orderByChild("email")
.equalTo(email)
.once("value", (snapshot) => {
console.log(snapshot.val())
return snapshot.val();
});
}
我不知道为什么,但是当我 return snapshot.val() 中的对象时,它不会 return 我前面的任何东西,但是当我 console.log () 它,它正确地显示了对象。我是这样 return 的:
function Loggear({ email, password }) {
db.ref("Usuarios")
.orderByChild("email")
.equalTo(email)
.on("child_added", (snapshot) => {
console.log(snapshot.val())
return snapshot.val();
});
}
它如何在 console.log() 上显示我的对象:
{
ciudad: 'Buenos Aires',
codigoPostal: '1000',
direccionCalle: 'la casa de tomas',
direccionNumero: '1',
documento: '1',
email: 'firebase@pruebita.com',
fechaNacimiento: '1111-01-01',
nombreCompleto: 'firebase',
password: 'contraseña',
telefonoCelular: '1233'
}
我认为这是因为您没有 returnLoggear 函数本身的任何值。添加的 on 子项的值仅 returned 到 Loggear 的范围。您必须从函数本身 return 它,即
function Loggear({ email, password }) {
return db.ref("Usuarios")
.orderByChild("email")
.equalTo(email)
.on("child_added", (snapshot) => {
console.log(snapshot.val())
return snapshot.val();
});
}
如果您只想获取一次数据,请使用once() instead of on(), as shown in the documentation。 on()
在某个数据库位置设置一个持久监听器,每当该位置发生变化时都会调用您的回调函数。那不是你想要的。而是使用 once()
,其中 returns 承诺通过数据快照解决:
function Loggear({ email, password }) {
return db.ref("Usuarios")
.orderByChild("email")
.equalTo(email)
.once("value", (snapshot) => {
console.log(snapshot.val())
return snapshot.val();
});
}