1 回答
TA贡献1765条经验 获得超5个赞
images被推送到您的数组,这onload意味着它是异步发生的。在图像返回到浏览器之前,您不能对图像进行操作。处理此问题的最佳方法是返回readImages一个Promise.all(),并加载每个单独的图像,因为它是您推送到数组的自己的 Promise Promise.all()。
const readImage = (file) =>
new Promise((resolve, reject) => {
const fileReader = new FileReader();
fileReader.onload = ({ target: { result } }) => resolve(result);
fileReader.onerror = () => reject(fileReader.error);
fileReader.readAsDataURL(file);
});
const readImages = ({ files }) => {
if (!files) {
return Promise.reject('No files provided');
}
const imgPromises = [];
files.forEach((file) => imgPromises.push(readImage(file)));
return Promise.all(imgPromises);
};
// The input 'event' target will contain the value of the field
const onInput = ({ target: { value } }) => {
readImages(value).then((imgArray) => {
const preview = document.getElementById('previewImages');
imgArray.forEach((img, index) => {
preview.innerHTML += `<img src="${img}" alt="image_${index}" />`;
});
});
};
document.getElementById('uploadImages').addEventListener('input', onInput);
注意:这实际上是原始代码,让您了解基础知识,并且不会检查您的最终结果集是否有错误。它还使用对象解构,这在旧浏览器中不起作用。
添加回答
举报