Tengo un componible en vue que carga datos en el almacenamiento de firebase. Funciona, pero no puedo sacar los datos del componible. ¿Creo que tiene algo que ver con una devolución o donde estoy definiendo términos?
El siguiente código se basa en la documentación disponible para Firebase Storage ( https://firebase.google.com/docs/storage/web/upload-files ).
useStorage.js
import { ref } from "vue"; import { projectStorage } from "../firebase/config"; import { uploadBytesResumable, getDownloadURL, ref as storageRef, } from "@firebase/storage"; const useStorage = () => { const error = ref(null); const url = ref(null); const filePath = ref(null); const uploadImage = async (file) => { filePath.value = `images/${file.name}`; const storageReference = storageRef(projectStorage, filePath.value); const uploadTask = uploadBytesResumable(storageReference, file); await uploadTask.on( "state_changed", (snapshot) => { const progress = (snapshot.bytesTransferred / snapshot.totalBytes) * 100; console.log("Upload is " + progress + "% done"); }, (err) => { console.log(err); error.value = err.message; }, () => { getDownloadURL(uploadTask.snapshot.ref).then((downloadURL) => { console.log("File available at", downloadURL); url.value = downloadURL; console.log(url.value); <--HAS CORRECT VALUE return url.value; <--DOESNT DO ANYTHING }); } ); console.log(url.value); }; return { url, filePath, error, uploadImage }; <--URL IS NOT RETURNING OUT OF THIS COMPOSABLE }; export default useStorage;Un enfoque más sencillo sería await getDownloadUrl: url.value = await getDownloadURL(uploadTask.snapshot.ref) . Luego, puede deshacerse de .then en esa función. En este momento, return url.value no está asignado a nada.
Advertencia : también escriba algún tipo de captura, en caso de que algo salga mal, en un entorno de producción.