#javascript #browser #promise #fetch #heic
#javascript #браузер #обещаю #принести #heic
Вопрос:
Я использую 2 библиотеки (heic2any и image conversion), чтобы попытаться конвертировать и сжимать изображения heic в формат jpeg. На данный момент у меня возникли проблемы с получением обещаний для возврата в правильном порядке
e = screenInput(e);
async function screenInput(filename) {
//checks file extension
var ext = getExtension(filename);
switch (ext.toLowerCase()) {
case 'jpg':
case 'jpeg':
case 'png':
case 'bmp':
return(compressim(filename));
break;
case 'heic':
var url = URL.createObjectURL(filename)
var result = await heicConvert(url)
return compressOnly(result);
break;
default:
return filename
break;
}
}
function heicConvert(input) {
return fetch(input)
.then((res)=>res.blob())
.then((blob)=>(heic2any({blob,toType:"image/jpeg"})))
}
function compressOnly(image) {
var file
file = new File([imageConversion.compressAccurately(image,500)], image.name, {type: "image/jpeg"})
return file
}
на данный момент он возвращает ожидающее обещание по
var result = await heicConvert(url)
еще до того, как перейти к
compressOnly (результат);
Любая помощь была бы признательна, я застрял на этом некоторое время!
Комментарии:
1.
heic2any({blob,toType:"image/jpeg"})
Возвращает ли обещание? Возможно, попробуйте другую цепочку.then(blob=>heic2any({blob,toType:"image/jpeg"})).then(heic=>heic)
2. Почему вы немедленно вызываете heic2any? Возврат вместо:
.then( (blob) => heic2any( { blob,toType:"image/jpeg" } ))
3. @ptothep да, он возвращает обещание, я пробовал другие цепочки, но, к сожалению, никакого результата
4. @SebastianAmmon Я не понимаю вашего предложения. Разве это не то, что уже делает код? Он будет вызываться только
heic2any
тогда, когда цепочка обещаний разрешится.5. для чего нужен этот код:
e = screenInput(e)
? e всегда будет получать обещание здесь…