typescript - Angular/Firestore - Esperar una consulta de documento de Firestore
Tengo una función en un servicio que se usa para crear un nuevo documento. Uno de los valores de este nuevo documento necesita provenir de un valor almacenado en otro documento.
¿Cómo espero el valor devuelto de una consulta de documento (getDoc) antes de actualizar mi nuevo documento?
Los pasos que imaginé (por favor corrígeme si me equivoco) serían:
- Llama a la función
getDocy devuelve un valor, digamos 'birthday' - Una vez que este valor haya regresado, llama a la función
newDocumentpara que el valorbirthdaypueda ser usado para elnew_value
Función para agregar un nuevo documento:
newDocument(g){
const newID = this.afs.createId();
this.afs.doc<Interface>(`col/${id}/col/${newID}`).set({
new_value: // needs to come from other query
});
}
Función que consulta el documento del que necesito datos:
getDoc(ID: string) {
return this.afs.doc<Interface>(`col/${ID}`).valueChanges().pipe(shareReplay());
}
Respuesta #1
Recomendaría leer los documentos oficiales de AngularFire, donde puedes ver un ejemplo básico de cómo consultar y manipular documentos.
En tu caso, deberías esperar la llamada get en tu documento convirtiéndola en una Promesa o dentro de una llamada subscribe(). A modo de ejemplo, puse todo en la misma función.
async newDocument(){
const ID = 'some_id';
const docData = await this.afs.doc(`col/${ID}`).get().toPromise(); // Await the doc data
const newID = this.afs.createId();
this.afs.doc(`col/${id}/col/${newID}`).set({
new_value: docData
});
}
