首页 > 解决方案 > snapshot.val() 返回未定义,但它记录正确。Node.js 火力基地

问题描述

我不知道为什么,但是当我在 snapshot.val() 中返回对象时,它不会将任何东西返回到我的前面,但是当我 console.log() 它时,它会正确显示对象。这是我返回它的方式:

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'
}

标签: javascriptnode.jsfirebasefirebase-realtime-databasefirebase-admin

解决方案


如果您只想获取一次数据,请使用once()而不是on(),如文档中所示。 on()在某个数据库位置设置一个持久侦听器,并且每次在该位置发生更改时都会调用您的回调函数。那不是你想要的。而是使用once(),它返回用数据快照解析的承诺:

function Loggear({ email, password }) {
  return db.ref("Usuarios")
    .orderByChild("email")
    .equalTo(email)
    .once("value", (snapshot) => {
      console.log(snapshot.val())
      return snapshot.val();
    });
}

推荐阅读