【发布时间】:2022-07-24 00:56:38
【问题描述】:
我想创建一个基于base64 的image uplaoder,我想获得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}/>
【问题讨论】:
-
您需要将 setArray 逻辑放在
onloadend回调中。 -
使用
console.log(array)时结果不可用,因为尚未调用回调。 -
@MaartenDev 那么解决方案是什么?你能提供答案吗?
-
将
setArray(array)调用移动到. onloadend回调中 -
@MaartenDev 仍然返回空数组,但是在选择第二个图像后它给我一个包含第一个选定图像的数组,而不是两者,任何解决方案? -- 代码更新
标签: javascript reactjs typescript ecmascript-6 babeljs