2 回答
TA贡献1886条经验 获得超2个赞
正如您所说,这是因为readAsDataURL()是异步的,因此您必须等到所有文件都被读取后才能使用您的数组。
const arrayStamp = [];
handleFiles(event) {
let files = event.target.files,
i = 0,
reader = new FileReader();
reader.onload = (e) => {
arrayStamp.push({photo: reader.result})
if (i++ < files.length - 1) {
// Read the next file.
reader.readAsDataURL(files[i]);
} else {
// All files have been read.
console.log(arrayStamp);
}
};
reader.readAsDataURL(files[i]);
}
我没有测试过这个,但应该给你这个想法。本质上,您使用一个 fileReader 按顺序加载每个文件并将结果推送到您的数组。
TA贡献1864条经验 获得超2个赞
在函数目录中
export function getBase64(img, callback) {
const reader = new FileReader()
reader.addEventListener('load', () => callback(reader.result))
reader.readAsDataURL(img)
}
并使用这个:
import { getBase64 } from 'functionsDirectory'
for (let i = 0; i < files.length; i++) {
getBase64(
files[i],
base64 => { arrayStamp.push({base64, file: files[i]}) }
)
}
添加回答
举报