Tengo la siguiente estructura en mi Storage , Post/ID/image.jpg. La publicación y el ID son carpetas que se pueden encontrar fácilmente, pero el ID puede contener varias imágenes. ¿Cómo podría borrarlos todos? Dentro de mi código, tengo una función que debería eliminar Publicaciones dentro de la base de firestore database de firestore y eliminar la referencia de imágenes del firebase storage
El error arrojado es:
TypeError: no se pueden leer las propiedades de undefined (leyendo '_throwIfRoot')
Eliminar función
const DeletePost = async (e) => { e.preventDefault(); const querySnapshot = await getDocs(collection(db, `${category}Posts`)); querySnapshot.forEach((docx) => { if (post.AdTitle === docx.data().AdTitle) { try { deleteObject(ref(storage, `${category}Posts`, docx.id).child); deleteDoc(doc(db, `${category}Posts`, docx.id)); } catch (error) { console.log("error in delete image, " + error); } // router.reload(); } }); };EDITAR
No hay ninguna propiedad child en StorageReference . Intente eliminarlo como se muestra a continuación:
deleteObject(ref(storage, `${category}Posts`, docx.id + ".ext")) // .child); // Make sure you add the file extension at the end Además, tanto deleteObject() como deleteDoc devuelven una promesa, así que haga el pago: Uso de async/await con un bucle forEach
Siguiendo esta documentación , finalmente se me ocurrió una solución funcional y aquí está el código actualizado.
try { const listRef = ref(storage, `${category}Posts/${docx.id}/`); listAll(listRef) .then((res) => { res.items.forEach((itemRef) => { setValues((prevState) => [...prevState, itemRef]); }); if (values !== "") { console.log("attempting"); values?.map((value) => deleteObject( ref(storage, `${category}Posts/${docx.id}/${value.name}`) ).then(() => { console.log("storage success"); }) ); deleteDoc(doc(db, `${category}Posts`, docx.id)).then(() => { console.log("doc success"); router.reload(); }); } }) .catch((error) => { console.log("error : " + error); })