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

150
Vistas
¿Devolviendo nulo en el disparador de la función firestore después del código asíncrono?

Tengo problemas para entender cómo finalizar correctamente un disparador de Firestore. Por lo que leí de this y this , parece que solo debe devolver nulo para finalizar una función si no hay un código asíncrono como para finalizar rápidamente si no se cumple una condición. Cuando devuelvo nulo en mi escenario a continuación, parece funcionar bien. ¿Hay una mejor práctica para lo que estoy haciendo que me estoy perdiendo?

Necesito registrar mi propio mensaje de error personalizado, por lo que necesito la captura. Sé que podría devolver Promise.all aquí en lugar de nulo en el bloque de prueba, pero esto es solo código sudo para mi escenario.

 export const delacc = functions.auth.user().onDelete(async (user) => { const userUID = user.uid; try{ await admin.firestore().collection("users").doc(userUID).delete(); await admin.firestore().collection("spam").doc(userUID).delete(); await admin.firestore().collection("photos").doc(userUID).delete(); return null; }catch(error){ functions.logger.error(error) return null } });
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Lo que haría sería hacer que las operaciones de eliminación sean atómicas (eliminar todos los documentos o ninguno de ellos) y devolver la promesa devuelta por el lote ya que no se realiza ninguna otra tarea en esta función (lo que me hace pensar que devolver null no es no es una abstracción necesaria). Si el lote arroja un error, envíe al cliente un nuevo error HTTPS (junto con el error del lote) que (a) finaliza automáticamente la función de la nube y (b) le da al cliente el error del lote para evaluar, que, según el motivo, podría justificar un reintento o un mensaje de error para el usuario final.

 export const delacc = functions.auth.user().onDelete(async (user) => { const userUID = user.uid; const db = admin.firestore(); const batch = db.batch(); try { batch.delete(db.collection("users").doc(userUID)); batch.delete(db.collection("spam").doc(userUID)); batch.delete(db.collection("photos").doc(userUID)); const writeResult = await batch.commit(); return writeResult; } catch(error) { functions.logger.error(error); throw new functions.https.HttpsError("unknown", "batch-error", error); } });
about 4 years ago · Juan Pablo Isaza Denunciar

0

No hay un requisito estricto para devolver nulo. De hecho, las funciones asíncronas siempre devuelven una promesa, sin importar lo que haga dentro de la función. La promesa que devuelve se basa en la finalización de cualquier otra promesa que espere durante el procesamiento. Incluso si devuelve explícitamente un valor nulo, la función sigue devolviendo una promesa que se cumple inmediatamente con el valor nulo. No tiene ningún efecto en el resultado final, ya que los disparadores onDelete de Cloud Functions no usan el valor cumplido de ninguna manera. Lo importante es que la función devuelve una promesa que indica cuándo se completa todo el trabajo (y, como dije, las funciones asíncronas siempre hacen eso si usa await correctamente dentro de la función en todo el trabajo asíncrono).

Cuando no esté usando async/await, aconsejo a los programadores que siempre devuelvan una promesa, o un valor nulo si no hay trabajo asíncrono . El valor nulo es una manera explícita de decirle al lector de su código que no tiene la intención de que Cloud Functions espere ningún trabajo asíncrono antes de finalizar por completo la función. También ayuda a satisfacer las advertencias de eslint o TypeScript, lo que le sugerirá que debe devolver algo. El valor en sí no es realmente importante: es lo que está comunicando a los demás sobre la finalización de su función. La legibilidad del código es importante si trabaja con otros.

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