es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Obtener el documento dentro de la devolución de llamada de una función de Firebase Cloud.

Con las funciones de nube de Firebase, si quiero hacer referencia a un documento (‘/users/’ + userId) dentro de una devolución de llamada, ¿es así como lo haría? El userId está dentro del primer snapshot, por lo que tendría que llamar a otra llamada asincrónica para obtener el documento de usuario, pero creo que algo está mal con mi sintaxis ya que esto produce un error.

exports.onCommentCreation = functions.firestore.document('/forum/threads/threads/{threadId}/comments/{commentId}')
 .onCreate(async(snapshot, context) => {

     var commentDataSnap = snapshot; 
     var userId = commentDataSnap.data().userId; 
     var userRef = await functions.firestore.document('/users/' + userId).get();
     var userEmail = userRef.data().email; 
});
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, así es como se referenciaría un documento dentro de un callback utilizando las funciones de Cloud de Firebase. Sin embargo, hay un error en la sintaxis al llamar a functions.firestore.document. En su lugar, deberías utilizar admin.firestore().doc(). Aquí está la sintaxis corregida:

    exports.onCommentCreation = functions.firestore.document('/forum/threads/threads/{threadId}/comments/{commentId}')
      .onCreate(async(snapshot, context) => {
    
        var commentDataSnap = snapshot; 
        var userId = commentDataSnap.data().userId; 
        var userRef = await admin.firestore().doc('/users/' + userId).get();
        var userEmail = userRef.data().email; 
      });
    

    Ten en cuenta que necesitas importar admin en la parte superior de tu archivo para que funcione:

    const admin = require('firebase-admin');
    admin.initializeApp();
    

Comments are closed.