Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

117
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!