Функции выборки / обещания не возвращаются корректно

#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 всегда будет получать обещание здесь…