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

202
Vistas
Problema al usar Cloud Functions para sincronizar la base de datos en tiempo real con Firestore

Estoy usando una función en la nube extremadamente simple para (intentar) mantener mi base de datos en tiempo real sincronizada con Firestore.

 exports.copyDocument = functions.database.ref('/invoices/{companyId}/{documentId}') .onWrite((change, context) => { if (!change.after.exists()) { return null; } return admin.firestore().collection('companies').doc(context.params.companyId).collection('invoices') .doc(context.params.documentId) .set(change.after.val()); });

Desafortunadamente, veo problemas en los que, a veces, el documento de Cloud Firestore no tiene la copia más reciente de los datos de la base de datos en tiempo real. Es poco frecuente, pero no obstante afecta a mis usuarios finales.

¿Por qué está pasando esto?

Dos ideas que tuve fueron -

  1. Es posible que Firestore no esté disponible para escribir en Cloud Function, y no tengo habilitados los reintentos en mi Cloud Function, por lo que podría estar fallando. Habilitar los reintentos resolverá mi problema. Sin embargo, tengo absolutamente 0 registros de error de que esto suceda.

  2. El usuario hace el cambio A, luego el usuario hace el cambio B 2-3 segundos después. En este caso, es posible, supongo, que el disparador de Cloud Function para el cambio A no se haya ejecutado, pero el disparador para el cambio B se ejecuta rápidamente, luego el disparador del cambio A se ejecuta y copia los datos 'obsoletos'. Los posibles remedios serían obtener la última versión nuevamente de la base de datos en tiempo real en mi Cloud Function (no es lo ideal, es bueno usar change.after.val() ), o tal vez mantener algún número entero incremental en mi documento, y en su lugar copiarlo en el Firestore usa una transacción que compara versiones en lugar de un simple set() .

  3. El único mensaje de error que veo en mis registros de errores de Cloud Function es:

La solicitud se anuló porque no había ninguna instancia disponible. Puede encontrar documentación adicional para la solución de problemas en: https://cloud.google.com/functions/docs/troubleshooting#scalability

Pero esos documentos indican que este error siempre se vuelve a intentar, incluso sin habilitar explícitamente los reintentos de funciones.

Me inclino por el problema 1: Firestore solo emite un parpadeo a veces, los reintentos no están habilitados y no estoy registrando la promesa fallida correctamente. Si este es el caso, ¿cómo puedo solucionar este registro?

about 4 years ago · Juan Pablo Isaza
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