在ReactJs中等待CSV回传并解析promise可以通过以下步骤实现:
npm install csv-parser axios
import React, { useState } from 'react';
import axios from 'axios';
import * as csvParser from 'csv-parser';
function MyComponent() {
const [csvData, setCsvData] = useState([]);
const handleFileUpload = (event) => {
const file = event.target.files[0];
const promise = new Promise((resolve, reject) => {
const reader = new FileReader();
reader.onload = (e) => {
resolve(e.target.result);
};
reader.onerror = (e) => {
reject(new Error('Unable to read the file'));
};
reader.readAsText(file);
});
promise
.then((csvContent) => {
return new Promise((resolve, reject) => {
const parsedData = [];
const stream = csvParser({ headers: false })
.on('data', (row) => parsedData.push(row))
.on('end', () => resolve(parsedData))
.on('error', (error) => reject(error));
stream.write(csvContent);
stream.end();
});
})
.then((parsedData) => {
setCsvData(parsedData);
})
.catch((error) => {
console.error(error);
});
};
return (
<div>
<input type="file" onChange={handleFileUpload} />
{csvData.map((row, index) => (
<div key={index}>{JSON.stringify(row)}</div>
))}
</div>
);
}
export default MyComponent;
promise
对象,通过使用FileReader
读取上传的CSV文件,并在onload
回调函数中将结果传递给resolve
方法。promise
对象成功返回时,再次创建一个新的promise
对象,以便解析CSV数据。这里使用了csv-parser
库来解析CSV内容。通过on('data')
事件,将解析后的数据保存到parsedData
数组中。当所有数据都解析完成时,通过on('end')
事件将解析后的数据传递给resolve
方法。then
方法链式调用,将解析后的数据设置到组件的csvData
状态中,以便在渲染过程中显示数据。如果发生任何错误,通过catch
方法捕获并打印错误信息。需要注意的是,上述代码中使用的csv-parser
和axios
只是示例中的库,并非腾讯云的相关产品。您可以根据需要替换为腾讯云提供的适用于CSV解析和文件上传的相关产品或服务。
领取专属 10元无门槛券
手把手带您无忧上云