如何运行exif函数异步并等待结果?

时间:2020-10-05 09:23:05

标签: javascript asynchronous async-await exif

我无法运行EXIF.js并等待结果。

exif的默认用法是:

function getExif() {
    var img1 = document.getElementById("img1");
    EXIF.getData(img1, function() {
        var make = EXIF.getTag(this, "Make");
        var model = EXIF.getTag(this, "Model");
        var makeAndModel = document.getElementById("makeAndModel");
        makeAndModel.innerHTML = `${make} ${model}`;
    });

    var img2 = document.getElementById("img2");
    EXIF.getData(img2, function() {
        var allMetaData = EXIF.getAllTags(this);
        var allMetaDataSpan = document.getElementById("allMetaDataSpan");
        allMetaDataSpan.innerHTML = JSON.stringify(allMetaData, null, "\t");
    });
}

但是,事情是我需要等待exif返回数据,然后再将其传递给使用数据创建卡的组件。

我的代码是:

async function filedata(i){
  const selectedFile = document.getElementById('input').files[i];
  EXIF.getData(selectedFile, async function metadata() {
    if (this.exifdata.GPSLatitude !== undefined && this.exifdata.GPSLongitude !== undefined) {
    return {
          cardId: selectedFile.name,
          imageUrl: window.URL.createObjectURL(selectedFile),
          size: selectedFile.size,
          lat: calculateGpsDatalat(selectedFile),
          lon: calculateGpsDatalon(selectedFile),
        }
    }}
  )
 let data = await metadata();
 return data;
}

当然会给出错误:

Failed to compile.

./src/App.js
  Line 29:19:  'metadata' is not defined  no-undef     

Search for the keywords to learn more about each error.

问题是如何编写此函数以等待来自Exif函数的数据。

谢谢。

0 个答案:

没有答案