我想创建一个基于base64
的image
上传器,我想得到一个array
的结果,但我得到了empty!
数组,我知道这可能是一个asynchronous
问题,但我不知道如何在map
中使用async, await
,有什么想法吗?
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}/>
1条答案
按热度按时间bfnvny8b1#
由于该
asynchronous
性质,在阵列中设置数据urls
之前,设置状态,即push
。这就是
array
返回空的原因。若要修正此问题,您可以使用create
Promise
,它会在每个档案的载入事件之后解析。并使用Promise.all
,它会在解析每个Promise之后解析,然后使用setArray
: