1 回答

TA貢獻(xiàn)1765條經(jīng)驗(yàn) 獲得超5個(gè)贊
images被推送到您的數(shù)組,這onload意味著它是異步發(fā)生的。在圖像返回到瀏覽器之前,您不能對圖像進(jìn)行操作。處理此問題的最佳方法是返回readImages一個(gè)Promise.all(),并加載每個(gè)單獨(dú)的圖像,因?yàn)樗悄扑偷綌?shù)組的自己的 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);
注意:這實(shí)際上是原始代碼,讓您了解基礎(chǔ)知識,并且不會(huì)檢查您的最終結(jié)果集是否有錯(cuò)誤。它還使用對象解構(gòu),這在舊瀏覽器中不起作用。
添加回答
舉報(bào)