Estoy tratando de recorrer una colección de usuarios, que son documentos, en mi base de datos de Firestore. Los documentos de usuario que obtengo tienen subcolecciones dentro de ellos. Dentro de estas subcolecciones, quiero agregar un documento. Actualmente estoy en el punto de agregar el documento a la subcolección, pero me dicen que el método de recopilación no existe porque userDoc todavía está en una promesa que no tiene ningún sentido porque cuando imprimo la identificación del userDoc I obtenga la identificación del documento en firestore. Error:
No capturado (en promesa) TypeError: userDoc.collection no es una función
Mi código está abajo.
async function preformSignaling() { let users = await negDoc.collection("users").get(); for (let userDoc of users.docs) { if (isNotAlreadyConnected(userDoc.id)) { let newPeerConnection = new UserConnection(servers, userDoc.id); if ( userDoc.id != sessionStorage.getItem("userID") && userDoc.id != "metadata" ) { let connOfferDescription = await newPeerConnection.userPeerConnection.createOffer(); await newPeerConnection.userPeerConnection.setLocalDescription( connOfferDescription ); await userDoc.collection("offer-candidates").doc("offer").set({ offer: newPeerConnection.userPeerConnection.localDescription, }); } peerConnections.push(newPeerConnection); } } } class UserConnection { constructor(servers, remoteUserID) { this.userPeerConnection = new RTCPeerConnection(servers); this.remoteStream = new MediaStream(); this.remoteUserID = remoteUserID; getRemoteUserID() { return this.remoteUserID; } }Código en cuestión:
await userDoc.collection("offer-candidates").doc("offer").set({ offer: newPeerConnection.userPeerConnection.localDescription, });El problema no tiene nada que ver con las promesas; estás esperando lo que se supone que debes esperar. El problema es que userDoc es una instantánea de documento (es decir, el resultado de consultar la base de datos) y las instantáneas de documentos no tienen un método .collection . Básicamente, solo tienen un método .data() , y luego algunas propiedades de metadatos (por ejemplo, .id , .exists )
En su lugar, debe hacer lo siguiente:
await negDoc .collection("users") .doc(userDoc.id) .collection("offer-candidates") .doc("offer") .set({ offer: newPeerConnection.userPeerConnection.localDescription, });