Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

302
Views
Subir varias fotos a la vez en el almacenamiento de firebase y almacenar sus URL en un documento de firestore (firebase versión 9)

Estoy creando un formulario donde el usuario necesita ingresar información para crear un documento de ciudad. El usuario también necesita cargar varias fotos de la ciudad. Al enviar el formulario, se crea un nuevo documento de la ciudad en firestore, luego cada foto se carga en el almacenamiento de firebase asociado y, finalmente, se agrega un nuevo campo llamado photosURLs con todas las URL de las fotos al documento de la ciudad.

Aquí está mi código:

 async function addDocument() { const docRef = await addDoc(collection(db, "cities"), { name: "Tokyo", country: "Japan" }); return docRef } async function UploadMultiplePhotos(docRef) { var photos = [] for (var i = 0; i < files.value.length; i++) { // files.values contains all the files objects const file = files.value[i]; refStorageFunction( storage, "cities/" + docRef.id + "/" + file.name ); uploadBytes(storageRef, file).then((snapshot) => { getDownloadURL(snapshot.ref).then((downloadURL) => { photos.push(downloadURL) }); }); } return Promise.resolve(photos) } async function updateDocument(docRef, photos) { await updateDoc(docRef, { photosURLs: photos }); } function createCity() { addDocument().then((docRef) => { UploadMultiplePhotos(docRef).then((photos) => { updateDocument(docRef, photos).then(() => { router.push($CITY_PATH) }) }) }) }

Mi problema es que el campo photosURLs resultante en el documento de la ciudad está vacío. Parece que mi función UploadMultiplePhotos no espera a que la matriz de photos se complete por completo.

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Si establece puntos de interrupción y ejecuta el código en un depurador, o agrega algunas declaraciones de registro bien ubicadas, verá que su return Promise.resolve(photos) se ejecuta antes de que se llame a photos.push(downloadURL) : así que siempre se resuelve con una matriz vacía.

Una solución simple es usar await en lugar de then() :

 async function UploadMultiplePhotos(docRef) { var photos = [] for (var i = 0; i < files.value.length; i++) { // files.values contains all the files objects const file = files.value[i]; refStorageFunction( storage, "cities/" + docRef.id + "/" + file.name ); const snapshot = await uploadBytes(storageRef, file) const downloadURL = await getDownloadURL(snapshot.ref) photos.push(downloadURL) } return photos }
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!