Tengo una serie de ID de documentos que quiero eliminar al usar una función en la nube, mi código se parece a lo siguiente:
//If the user decieds on deleting his account forever we need to make sure we wont have any thing left inside of db after this !! // incoming payload array of 3 docs data = {array : ['a302-5e9c8ae97b3b','92c8d309-090d','a302-5e932c8ae97b3b']} export const deleteClients = functions.https.onCall(async (data, context) => { try { // declare batch const batch = db.batch(); // set data.arr.forEach((doc: string) => { batch.delete(db.collection('Data'), doc); }); // commit await batch.commit(); } catch (e) { console.log(e); } return null; });Eliminar toma un único parámetro, la referencia del documento que se va a eliminar.
data.arr.forEach((docId: string) => { batch.delete(doc(db, "Data", docId)); });Hay varios errores en tu código:
data.arr.forEach() no puede funcionar porque su objeto de datos contiene un elemento con la array de claves y no la clave arr .return null; DESPUÉS del bloque try/catch: esto significa que, en la mayoría de los casos, su función en la nube finalizará antes de que se complete el trabajo asíncrono (vea el enlace anterior)Entonces, lo siguiente debería funcionar (no probado):
const db = admin.firestore(); const data = {array : ['a302-5e9c8ae97b3b','92c8d309-090d','a302-5e932c8ae97b3b']}; export const deleteClients = functions.https.onCall(async (data, context) => { try { const batch = db.batch(); const parentCollection = db.collection('Data') data.array.forEach((docId) => { batch.delete(parentCollection.doc(docId)); }); // commit await batch.commit(); return {result: 'success'} // IMPORTANT, see explanations above } catch (e) { console.log(e); // IMPORTANT See https://firebase.google.com/docs/functions/callable#handle_errors } });