将获取的Blob数据转换为对象并返回

时间:2020-08-10 14:01:33

标签: javascript reactjs ecmascript-6

我有一个函数来获取存储在S3中的.csv文件,然后读取其中的blob,将其转换为和对象并返回:

import { Storage } from "aws-amplify";
import Papa from "papaparse";



const GetDataFromS3 = (pathToFile) => {
  Storage.get(pathToFile, { download: true, expires: 10 })
    .then((result) => {
      var blob = new Blob([result.Body], {
         type: "text/csv",
      });
      blob.text().then(async (data) => {
        const obj = await Papa.parse(data, { header: true });

        return obj;
      });
    })
    .catch((err) => console.log(err));
};
export default GetDataFromS3;

问题是,当我在另一个我想使用所获取数据的组件的useEffect中调用此函数时,数据为undefined

useEffect(() => {
    async function fetchData() {
      const data = await GetDataFromS3("AirPassengers.csv");
      await console.log(data); //logs undefined
      await setData(data);
    }
    fetchData();
  }, []);

我在做什么错了,也许有更好的方法来实现这一目标?

1 个答案:

答案 0 :(得分:0)

对于一个,您只是忽略了GetDataFromS3中的所有错误,这是错误的形式。

第二,我认为Blob转换是不必要的;您应该就能轻松度过

async function getDataFromS3(pathToFile) {
  const result = await Storage.get(pathToFile, { download: true, expires: 10 });
  const obj = await Papa.parse(result.Body, { header: true });
  return obj;
}