Necesito implementar esta función asíncrona,
const uploadImage = async () => { const filename = new Date().getTime() + photo!.name const storage = getStorage(app) const storageRef = ref(storage, filename) const uploadTask = uploadBytesResumable(storageRef, photo!); uploadTask.on('state_changed', (snapshot) => {}, (error) => { console.log("error while uploading photo", error) }, async () => { photoUrl = await getDownloadURL(uploadTask.snapshot.ref); console.log("getDownloadURL", photoUrl) return photoUrl } ); }Es la función para subir imágenes a Firebase-Storage. Aquí necesito devolver el "photoUrl". Necesito llamar a la función como,
const res = await uploadImage(photo)¿Cómo hago esto? La URL de la imagen cargada debería regresar desde la función.
El objeto devuelto por uploadBytesResumable también es una promesa, por lo que puede await y luego llamar a getDownloadURL :
const uploadImage = async () => { const filename = new Date().getTime() + photo!.name const storage = getStorage(app) const storageRef = ref(storage, filename) const uploadTask = uploadBytesResumable(storageRef, photo!); await uploadTask; photoUrl = await getDownloadURL(uploadTask.snapshot.ref); return photoUrl } En realidad, ni siquiera necesita una referencia a la tarea, ya que ya tiene el storageRef , lo anterior se puede acortar a:
const uploadImage = async () => { const filename = new Date().getTime() + photo!.name const storage = getStorage(app) const storageRef = ref(storage, filename) await uploadBytesResumable(storageRef, photo!); return await getDownloadURL(storageRef); }