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

188
Vistas
ReactJS carga varias imágenes en base64 en una matriz

¡Quiero crear un cargador de image basado en base64 y quiero obtener resultados como una array , pero me quedé empty! matriz, sé que tal vez sea un problema asynchronous , pero no sé cómo usar async, await en el map , ¿alguna idea?

 const [array, setArray] = useState([]); const fileBase64 = (img) => { let result = [...img]; setUrlImage(img); result && result.map(function (img){ let fileReader = new FileReader(); fileReader.readAsDataURL(img); fileReader.onloadend = async () => { let res = await fileReader.result; setArray([...array, res]) }; }) console.log(array) } const handleImage = (e) => { let image = [...e.target.files]; fileBase64(image); } <input type="file" multiple={true} onChange={handleImage}/>
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Debido a esta naturaleza asynchronous , el estado se establece, es decir, se push antes de que las urls de datos se establezcan en la matriz.

Y esa es la razón por la que su array regresa vacía.

Para solucionarlo, puede usar create Promise , que se resuelve después del evento de carga de cada archivo. Y use Promise.all , que se resolvería después de que cada Promise se haya resuelto y luego use setArray :

 fileBase64 = (img) => { return new Promise((resolve, reject) => { let fileReader = new FileReader(); fileReader.onerror = reject fileReader.onload = function () { resolve(fileReader.result) } fileReader.readAsDataURL(img) }) } handleImage = (e) => { let image = e.target.files; Promise.all(Array.from(image).map(this.readAsDataURL)) .then((urls) => { setArray(urls) }) .catch((error) => { console.error(error) }) }
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