Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

118
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda