Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

119
Vistas
Cómo obtener la identificación de un objeto de firebase

Estoy tratando de obtener la identificación de un objeto después de configurar ese objeto. Pero estoy recibiendo un error de tipo. TypeError: no se pueden leer las propiedades de undefined (leyendo 'val'). ¿Cómo debo hacer eso con firebase 9?

Aquí está el código que quiero trabajar:

 set(push(ref(db, "expenses")), expense) .then((snapshot) => { console.log(snapshot.val()); dispatch( addExpense({ id: snapshot.key, ...expense, }) ); }) .catch((e) => { console.log("This failed.", e); });

Gracias por adelantado.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Por qué tu código no funciona

La documentación de set(ref, value) muestra que se define como:

 function set(ref: DatabaseReference, value: unknown): Promise<void>

Devuelve un Promise<void> , por lo que no se pasa ninguna snapshot a su entonces.

Si la promesa se resuelve (y, por lo tanto then se llama a su devolución de llamada), el expense se escribió en la base de datos en el servidor tal como está.


Como arreglarlo

Si desea obtener la clave de la llamada push , ya puede capturarla fuera de la llamada set :

 const newRef = push(ref(db, "expenses")); set(newRef, expense) .then(() => { dispatch( addExpense({ id: newRef.key, ...expense, }) ); }) .catch((e) => { console.log("This failed.", e); });

Llamar push es una operación pura del lado del cliente, que es sincrónica, por lo que no requiere await o then (que debe usarse con operaciones sincrónicas).


Otras consideraciones

Sin embargo, tenga en cuenta que ahora solo muestra el gasto localmente después de que se haya escrito en el servidor. Si ese es un requisito para su caso de uso, entonces 👍. Pero al usar Firebase es bastante común:

  1. Use un oyente onValue permanente en expenses para mostrar los gastos más recientes en la interfaz de usuario.
  2. Escribe el nuevo gasto con una simple llamada, sin un oyente then() : set(push(ref(db, "expenses")), expense);
  3. El SDK de Firebase llamará inmediatamente al agente de escucha onValue local con el nuevo valor, asumiendo que la escritura se realizará correctamente.
  4. Por lo tanto, su interfaz de usuario mostrará el valor local de inmediato, lo que le dará al usuario una respuesta casi instantánea.
  5. En el caso (menos común) de que el servidor (es decir, sus reglas de seguridad) rechace la operación de escritura, el SDK vuelve a llamar a onValue con los datos corregidos, para que su interfaz de usuario pueda actualizar el estado.
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda