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);
注意:這實際上是原始代碼,讓您了解基礎知識,并且不會檢查您的最終結果集是否有錯誤。它還使用對象解構,這在舊瀏覽器中不起作用。
添加回答
舉報