Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

155
Vistas
Async await no funciona como se esperaba

Estoy tratando de configurar las imágenes después de subirlas a la nube, pero parece que me falta algo. La salida no es la deseada.

Espero que la salida tenga todas las imágenes. Pero es solo 0 en su lugar.

 useEffect(() => { console.log("============ From UseEffect ==========") console.log("Images now Contain : ", images); }, [images]); const uploadFilesToCloud = async () => { const data = new FormData(); for (let i = 0; i < imageUrls.length; i++) { const finalImage = await getBase64FromUrl(imageUrls[i]); data.append("file", finalImage); data.append("upload_preset", "myPreset"); const res = await fetch( "https://api.cloudinary.com/v1_1/dpurb6xes/image/upload", { method: "Post", body: data, } ); const response = await res.json(); setImages((old) => [...old, response.secure_url]); } }; const onClick = async (e) => { await uploadFilesToCloud(); const myForm = { name: name, imageUrls: images, }; console.log("form data is ", myForm); }

Sorprendentemente, la salida es:

ingrese la descripción de la imagen aquí

Mi pregunta actual es ahora.

  1. Aunque las imágenes tienen un elemento antes de configurar myForm.imgUrls = imágenes. Incluso entonces myForm.imageUrls no tiene ningún elemento. Cómo ?
  2. Y lo que quiero es que, después de configurar ambas imágenes recibidas, el formulario debe inicializarse con imágenes.

¿Puedes decir cómo hacer exactamente eso?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

No creo que haya realmente una necesidad de estado aquí. Asigne la matriz imageUrls a una matriz de fetch Promises y devuelva Promise.all from upload . El controlador onClick puede await la matriz de Promesas para resolver y usar la matriz de URL de imágenes resueltas.

Ejemplo:

 const App = () => { const upload = () => { const imgURLs = imageUrls.map(data => { return fetch( "https://api.cloudinary.com/v1_1/dpurb6xes/image/upload", { method: "Post", body: data, } ).then(response => response.json()) .then(response => response.secure_url); }); return Promise.all(imgURLs); }; const onClick = async () => { const imageURLs = await upload(); const myForm = { formImages: imageURLs, }; console.log("Form details", myForm); }; return ( <> <div className="container"> <button type="button" onClick={onClick} > Click me </button> </div> </> ); };

Si necesita almacenar las URL de las imágenes en el estado, el lugar para hacerlo es en el controlador onClick una vez que todo se resuelva.

Ejemplo:

 const onClick = async () => { const imageURLs = await upload(); const myForm = { formImages: imageURLs, }; console.log("Form details", myForm); setimages(imageURLs); };
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda