对读取的Excel文件数据进行拆分并发请求发送到后端服务器

首先,我们先回顾一下文件的读取操作:

本地读取Excel文件并进行数据压缩传递到服务器-CSDN博客

第一步:根据以上博客,我们将原先的handleFile方法,改为以下内容:

const handleFile = async(e) => {console.time('test')const file = e.target.files[0];const results = await new Promise((resolve,reject) => {Papa.parse(file,{header:true,skipEmptyLines:true,complete:resolve, //成功时的回调error:reject //失败时的回调})})const data = results.data;console.log(data)};

先对data数据进行打印,获取到一千多行的数据信息

那么如何对1000多条信息进行分组处理呢??? 

因为我们要对数据进行拆分,所以我们可以将此数据分成200个记录为一组的分组操作。

第二步:对数据进行分组操作

const batchSize = 200;
const dataChunks = [];
for(let i=0;i<data.length;i+=batchSize){const dataChunks = data.slice(i,i + batchSize);dataChunks.push(dataChunks);
}console.log(data,dataChunks)

第三步:引入eachLimit并对此进行操作

import { eachLimit } from "async"; //引入第三方类库  需要安装

以下的handleFile的全部代码

    const [results,setResults] = useState([]); //保留解析后的数据const [progress,setProgress] = useState({completed:0,total:0});const handleFile = async(e) => {console.time('test')const file = e.target.files[0];const results = await new Promise((resolve,reject) => {Papa.parse(file,{header:true,skipEmptyLines:true,complete:resolve, //成功时的回调error:reject //失败时的回调})})const data = results.data;console.log(data)const batchSize = 200;const dataChunks = [];for(let i=0;i<data.length;i+=batchSize){const dataChunks = data.slice(i,i + batchSize);dataChunks.push(dataChunks);}console.log(data,dataChunks) //输出原先数据以及分组后的数据const processData = async(dataChunks) => {const totalChunks = dataChunks.length; //总共需要发送的请求次数let completedChunks = 0; //已经完成的请求次数const resultsArray = []; //保存所有请求的结果const notifyProgress = () => {setProgress({completed: completedChunks,total: totalChunks,})}await eachLimit(dataChunks,5,async(chunk) => {const gzip = pako.gzip(JSON.stringify(chunk),{to:"string"});try{const response = await fetch('http://localhost:3000',{method:"POST",body:gzip,headers:{"Content-Type":"application/octet-stream",}});const result = {index:dataChunks.indexOf(chunk),success:response.ok,status:response.status,message:response.statusText,};resultsArray.push(result);completedChunks++;notifyProgress();setResults([...resultsArray]);}catch (error){const result = {index:dataChunks.indexOf(chunk),success:false,status:500,message:error.message,};resultsArray.push(result);completedChunks++;notifyProgress();setResults([...resultsArray]);}});console.timeEnd("test")}await processData(dataChunks);};
<input type="file" onChange={handleFile} accept='.csv' />

进度的展示

<h2>进度的展示</h2>
<div>Progress: { progress.completed } / { progress.total }
</div>

结果展示

<h2>结果显示</h2>
<ul>{results && results.map(result => {return <li key={result.index}>{result.index} - {result.success.toString()} - {result.status} - {""}{result.message}</li>})}
</ul>

此时,我们就可以尝试读取一个文件进行测试

由此看出,我们的顺序并不是按照顺序来排列的,那是因为我们进行请求的并发处理并不代表一定是按照顺序去进行数据的返回,因为可能在请求中,因为网络的问题先请求的操作可能会成为后返回的操作。

而result也是按照一定的批次进行返回的,而不是一条一条返回。

此时,我们点击修改背景颜色的按钮,也会很卡顿,所以这种情况需要在后续进行性能优化。

那么以上就是这些内容,希望对您有所帮助。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/649411.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

15. GPIO 应用编程

15. GPIO 应用编程 1. 应用层如何操控 GPIO2. GPIO 应用编程之输出3. GPIO 应用编程之输入4. GPIO 应用编程之中断 1. 应用层如何操控 GPIO GPIO 也是通过 sysfs 方式进行操控的&#xff0c;在/sys/class/gpio目录下 gpiochipX: I.MX6UL 有 5 个 GPIO&#xff0c;X 由小到大…

驱动开发-系统移植

一、Linux系统移植概念 需要移植三部分东西&#xff0c;Uboot ,内核 &#xff0c;根文件系统 &#xff08;rootfs&#xff09; &#xff0c;这三个构成了一个完整的Linux系统。 把这三部分学明白&#xff0c;系统移植就懂点了。 二、Uboot uboot就是引导程序下载的一段代…

【测一测】Jmeter知识大挑战!

不定项选择 1、Ramp-up period(seconds)代表在多长时间内把线程全部启动&#xff0c;如果线程数为10&#xff0c;而Ramp-up period设置为15&#xff0c;则每个线程的间隔时间为&#xff08;&#xff09; A、1 B、1.5 C、2 D、102、对于每个HTTP请求&#xff0c;都可以通过&am…

SQL - 数据控制语句

SQL - 数据控制语句 DCL - 数据控制 数据控制语言&#xff1a;Data Control Language。用来授权或回收访问数据库的某种特权&#xff0c;并控制数据库操纵事务发生的时间及效果&#xff0c;能够对数据库进行监视。 比如常见的授权、取消授权、回滚、提交等等操作。 权限管理…

数字图像处理(实践篇)三十 使用OpenCV-Python在图像上创建水印实践

目录 1 方案 2 实践 1 方案 ①导入依赖库 import cv2 import matplotlib.pyplot as plt ②读取输入图片和水印图片 im = cv2.imread(img_path) wm = cv2.imread(watermarkImg_path) ③计算roi

linux下jdb远程调试tomcat源码

jdb远程调试tomcat 在tomcat打开调试设置jvm参数 -Xrunjdwp:transportdt_socket,servery,address9090,suspendy在linux命令行jdb连接9090端口 jdb -attach ip:9090 -sourcepath /softwares/apache-tomcat-7.0.40-src/java设置断点 stop at org.apache.tomcat.util.Introspectio…

如何在云服务上通过docker部署服务?

如何在云服务上通过docker部署服务&#xff1f; 一、在云服务器上安装Docker1、查看云服务器的OS信息2、[安装Docker并使用&#xff08;Linux&#xff09;](https://help.aliyun.com/zh/ecs/use-cases/deploy-and-use-docker-on-alibaba-cloud-linux-2-instances) 二、通过dock…

【一次性解决】CUDA和PyTorch的安装与多版本管理的三种方式

很多人配置环境就是直接安装三件套&#xff0c;而对于版本管理不是很清楚。在开发初期&#xff0c;这样做没什么问题。但是如果服务器多人使用&#xff0c;或者复现代码多&#xff08;pytorch版本和cuda版本是互相依赖的&#xff09;&#xff0c;就需要更进一步的版本管理方法。…

Vue进阶:Vue中的ajax请求

一、Vue中的ajax请求 1.1 解决开发环境 Ajax 跨域问题 总结&#xff1a; 1.1.1 模拟跨域问题 准备好测试的服务器 server1.js const express require(express) const app express()app.use((request,response,next)>{console.log(有人请求服务器1了);// console.log(…

P4769 [NOI2018] 冒泡排序 洛谷黑题题解附源码

[NOI2018] 冒泡排序 题目背景 请注意&#xff0c;题目中存在 n 0 n0 n0 的数据。 题目描述 最近&#xff0c;小 S 对冒泡排序产生了浓厚的兴趣。为了问题简单&#xff0c;小 S 只研究对 1 1 1 到 n n n 的排列的冒泡排序。 下面是对冒泡排序的算法描述。 输入&#x…

韦东山嵌入式Liunx入门笔记一

文章目录 一、嵌入式Linux二、Ubuntu系统2-1 安装软件2-2 Linux文件(1) 文件架构(2)文件属性(3)文件命令(4) 解压、压缩文件(5) 网络命令 2-3 vi编辑器2-4 Ubuntu下包管理 三、配置网卡四、安装后续学习使用的软件4-1 MobaXterm4-2 FileZilla4-3 Source Insight4.04-4 下载BSP4…

Open CASCADE学习|圆柱螺旋线绘制原理探究

1、圆柱螺旋线绘制原理 在OCC中&#xff0c;圆柱面的参数方程为&#xff1a; 设P为&#xff08;x0,y0,z0&#xff09;,则 xx0r*cos(u) yy0r*sin(u) zz0v 但u、v之间有关系时&#xff0c;此方程表达为圆柱螺旋线&#xff0c;u、v之间为线性关系时是等螺距螺旋线&#xff0…

文件上传之秒传功能

秒传是一种文件的传输机制&#xff0c;用于在文件已经存在于目标服务器上时&#xff0c;通过校验文件的唯一标识&#xff0c;实现快速而无需从新上传整个文件&#xff0c;它解决了重复上传相同文件的问题&#xff0c;提高了文件传输的效率和节省了带宽资源。 技术阐述&#xff…

免 费 小程序商城搭建之鸿鹄云商 SAAS云产品概述

【SAAS云平台】打造全行业全渠道全场景的SaaS产品&#xff0c;为店铺经营场景提供一体化解决方案&#xff1b;门店经营区域化、网店经营一体化&#xff0c;本地化、全方位、一站式服务&#xff0c;为多门店提供统一运营解决方案&#xff1b;提供丰富多样的营销玩法覆盖所有经营…

软件测试面试八股文(2024新版)

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 1、你的测试职业发展是什么&#xff1f; 测试经验越多&#xff0c;测试能力越高。所以我的职业发…

【unity实战】实现蓄力丢手榴弹、烟雾弹、燃烧弹的效果

文章目录 爆炸燃烧烟雾效果资产手榴弹丢手雷烟雾弹、燃烧弹实现手雷每次撞墙弹发出音效&#xff08;补充&#xff09;完结 爆炸燃烧烟雾效果资产 https://assetstore.unity.com/packages/vfx/particles/war-fx-5669 手榴弹 手榴弹配置好刚体&#xff0c;碰撞体 新增脚本Th…

IO流-处理流之——对象流(序列化)

IO流-处理流之——对象流&#xff08;序列化&#xff09; 1.数据流及其作用&#xff08;了解&#xff09;2.对象流及其作用3.对象的序列化机制是什么4.如下两个过程使用的流&#xff1a;5.自定义类要想实现序列化机制&#xff0c;需满足&#xff1a;6.注意点&#xff1a; 1.数据…

Qlik Sense : Store With Retry (保存重试机制)

Background sometime you cannot store the file directly ,maybe there are another process are reading/storeing the file , so you would need to wait another proecess done and retry . then we come up this solution . 有时您不能直接存储文件&#xff0c;可能还有…

Jenkins CLI 任意文件读取漏洞复现(CVE-2024-23897)

0x01 产品简介 Jenkins 是一个开源的自动化服务器软件,用于构建、测试和部署软件项目。它提供了一种强大的方式来自动化软件开发和交付流程,以提高开发团队的效率和生产力。 0x02 漏洞概述 漏洞成因 命令行接口文件读取: Jenkins内置的命令行接口(CLI)存在一个特性,允…

实验:eNSP AR通过telnet远程登录另外一台AR

实验2&#xff1a;eNSP AR通过telnet远程登录另外一台AR 基于实验1的基础上来进行&#xff0c;我们通过AR2220登录AR3260 首先设置远程登录密码 1、user-interface vty 0 4 进入用户的虚拟终端 2、设置密码 set authentication password cipher Huawei 这里的意思就是设置密…