异步/等待读取Blob?

时间:2019-04-17 19:30:32

标签: javascript async-await blob

因此,使用本机JS,我可以读取基于文本的Blob,如下所示:

const getBlob = () =>
      let url = // some endpoint that returns a blob
      let xhr = new XMLHttpRequest();
      xhr.responseType = 'blob';
      xhr.onload = function(event) {
        let blob = xhr.response;
        let reader = new FileReader();
        reader.addEventListener('loadend', (e) => {
          let read = e.srcElement.result;
          console.log(read); <-- text I want
        });
        let read = reader.readAsText(blob);
        console.log(blob)
        console.log(read)
      }
      xhr.open('GET', url);
      xhr.send();
}

但是,我希望函数返回变量read

我的问题是,是否可以使用async / await重写它。

我问是因为我不确定reader.addEventListener(...)内的xhr.onload会如何工作

1 个答案:

答案 0 :(得分:0)

尝试使用Blob.text(); // returns a Promise。它是比FileReader.readAsText更新的方法。但是,许多浏览器都不支持它。

  • Blob.text()返回一个promise,而FileReader.readAsText()是基于事件的API。
  • Blob.text()始终使用UTF-8作为编码,而FileReader.readAsText()可以使用不同的编码,具体取决于 Blob的类型和指定的编码名称。

enter image description here

根据here

总结的答案

**** 我的建议是继续使用旧方法 ****