При попытке вывести любой элемент массива получаю undefined, однако если вывести весь массив через console.log, то он выводится.
showFiles = function(files) {
let resultArray = [];
for (let i = 0; i < files.length; i++) {
(function(file) {
let fr = new FileReader();
fr.onload = function(e) {
let image = new Image();
image.src = e.target.result;
image.onload = function() {
resultArray.push({
'src' : e.target.result,
'width' : this.width,
'height' : this.height,
'size' : file.size
});
}
};
fr.readAsDataURL(file);
})(files[i]);
}
console.log(resultArray[0]);
};
Вариант с использованием промисов и async\await.
async function showFiles(files) {
let resultArray = [];
for (let i = 0; i < files.length; i++) {
const file = files[i];
let fr = new FileReader();
const onload = new Promise((resolve, reject) => {
fr.onload = function(e) {
let image = new Image();
image.src = e.target.result;
image.onload = function() {
resultArray.push({
'src': e.target.result,
'width': this.width,
'height': this.height,
'size': file.size
});
resolve();
}
image.onerror = reject;
};
fr.onerror = reject;
});
fr.readAsDataURL(file);
await onload;
}
return resultArray;
};
async function fileChange() {
const res = await showFiles(inputFile.files);
console.log(res);
};
<input id="inputFile" type="file" multiple="true" onchange="fileChange()">
Сборка персонального компьютера от Artline: умный выбор для современных пользователей