Как получить значение [[PromiseValue]]? (РЕШЕНО)
РЕШЕНО: нашел ответ в этом посте «Вернуть промис или как получить PromiseValue»
У меня есть задача: Сжать полученное от пользователя изображение на клиенте и отправить на сервер.
Нашел решение хорошего компрессора свойствами JS на DEV.To
Вот код функции:
function compressImage (base64) {
const canvas = document.createElement('canvas')
const img = document.createElement('img')
return new Promise((resolve, reject) => {
img.onload = function () {
let width = img.width
let height = img.height
const maxHeight = 200
const maxWidth = 200
if (width > height) {
if (width > maxWidth) {
height = Math.round((height *= maxWidth / width))
width = maxWidth
}
} else {
if (height > maxHeight) {
width = Math.round((width *= maxHeight / height))
height = maxHeight
}
}
canvas.width = width
canvas.height = height
const ctx = canvas.getContext('2d')
ctx.drawImage(img, 0, 0, width, height)
resolve(canvas.toDataURL('image/jpeg', 0.7))
}
img.onerror = function (err) {
reject(err)
}
img.src = base64
})
}
При добавлении файла нужно отобразить выбранные изображения и вложить значение сжатой фотографии у input[type=hidden]
Вот код который реагирует на изменение input:
$('input[name=photos]').on('change', function() {
for (var i = 0, numFiles = this.files.length; i < numFiles; i++) {
var file = this.files[i];
var reader = new FileReader();
reader.onload = function(e) {
var image = new Image();
image.src = e.target.result;
var dataImg = CompressImage(image.src);
var imgCount = $('#list li').find('img').length;
var imgIndex = imgCount;
$('#list li').eq(imgIndex).find('input[name=photos]').after('<img src="'+e.target.result+'" width="70px" height="70px" />');
console.log(dataImg); // выводит в консоль [[PromiseValue]] Как его получить?!
};
reader.readAsDataURL(file);
}
});
КАК ПОЛУЧИТЬ ЗНАЧЕНИЕ [[PromiseValue]] ?!
Результат можно увидеть и протестировать на сайте eBolt

