React Promise 中断
需求:
- 上传文件,但是后端接口不支持多文件上传,但是一次性发出很多请求的话如果有100个文件那对后端的压力又太大了
- 在上传的时候还需要有停止上传的按钮
进程:
- async await 只能做到第一步,但是无法在上传中的时候关闭这个进程,只能先隐藏进程然后等当前进程结束之后在代码下面加一个判定是不是已经关闭
const uploadFile = async () => {isCancel.current = false;for (let i = 0; i < fileList.length; i++) {if (isCancel.current) {return;}const file = fileList[i]const res = await uploadFiles({ file })if (isCancel.current) {break;}}
- 但是这种做法只有在等 uploadFiles 里所有的东西都结束之后才能判定下一步的isCancel,但是这样会有一个问题,就是如果uploadFiles 执行时间很长,那么要么cancel 的执行时间会很长,要么就提前隐藏上传界面,但是这样有风险,如果用的人在cancel 的时候又点击了一下上传,那么就完了, 这个方法里的isCancel 又会变成 false,然后继续执行
- 使用传统的 Promise 中的reject 方法可以随时停止这个异步行为
const createCanCancelRequest = (requestFunc: () => Promise<any>) => {let func = () => {}const promise = new Promise((resolve, reject) => {func = () => reject("上传停止");requestFunc().then(resolve).catch(reject)})return { cancel: func, promise }
}
- 这个方法接收一个传入的匿名函数,然后将匿名函数包裹在 Promise 里,执行并返回一个cancel 方法
- 这个cancel 就是Promise 的 reject 方法,在调用这个方法之后未执行部分就会停止执行
- 但是这个方法有个缺点就是要自己手动写一个sleep,在上一步执行完成之前,都不能停止sleep
const uploadFile = async () => {isCancel.current = false;for (let i = 0; i < fileList.length; i++) {if (isCancel.current) {return;}const file = fileList[i]isBreak.current = falseconst {cancel, promise} = createCanCancelRequest(() => {uploadFiles({ file });isBreak.current = true})while(1) {await new Promise(resolve => setTimeout(resolve, 1000));if (isBreak.current) {break}}}
拓展:
- sleep 的逻辑,启动一个setTimeout 这是一个异步的实现,所以可以用 Promise 包起来并且做一个 await 就能实现暂停几秒的逻辑
相关文章:
React Promise 中断
需求: 上传文件,但是后端接口不支持多文件上传,但是一次性发出很多请求的话如果有100个文件那对后端的压力又太大了在上传的时候还需要有停止上传的按钮 进程: async await 只能做到第一步,但是无法在上传中的时候关…...
1.填空题 进制转换Oct.2023
原题 部分可能会有用处的知识: p p p进制转十进制: 假设有一个 p p p进制数,个位是 a 0 a_0 a0,向高位依次是 a 1 , a 2 , . . . , a n a_1,a_2,...,a_n a1,a2,...,an,向低位依次是 b 1 , b 2 , b 3 , . . . …...
node 解决多版本配置 error:03000086:digital 引起的问题 已解决
在日常后端工作中,难免会安装前端的项目,今天有旧项目需要维护,但是 提示 node版本过高,或者不是长维护版本,部分分享说,加 opensll 过滤能解决,但是 还是不行,索性来这个 底朝天的找…...
前端面试题: js中对比两个对象的值是否相等? for..in 和 for...of的区别?
我去面试的时候会问这个问题, 而且发现不管是初级还是工作一段时间的小伙伴 都会说的不是很清晰 比如第一道题哈: 首先大部分人都会想起来 我们用JSON.stringify() 进行转换,查看两个是否相等 你敢说我下面的对象 值不是想等的吗。 但是你用…...
第十七章:Java连接数据库jdbc(java和myql数据库连接)
1.进入命令行:输入cmd,以管理员身份运行 windowsr 2.登录mysql 3.创建库和表 4.使用Java命令查询数据库操作 添加包 导入包的快捷键 选择第四个 找到包的位置 导入成功 创建java项目 二:连接数据库: 第一步:注册驱动…...
Unity基于种子与地块概率的开放世界2D地图生成
public class BuildingGen : MonoBehaviour {public int[] Building;//存储要生成的地块代码public int[] Probability;//存储概率public double seed;public int width 100;public int height 100;public float noiseScale 0.1f; //噪声缩放倍数private int[,] frequencyM…...
5.Vectors Transformation Rules
在上节,有个问题:向量分量的转换方式 与 新旧基底的转换方式相反 用例子来感受一下, 空间中一向量V,即该空间的一个基底:e1、e2 v e1 e2 现把基底 e1 、 e2 放大两倍。变成 基向量放大了两倍, 但对于…...
聊聊httpclient的CPool
序 本文主要研究一下httpclient的CPool ConnPool org/apache/http/pool/ConnPool.java public interface ConnPool<T, E> {/*** Attempts to lease a connection for the given route and with the given* state from the pool.** param route route of the connecti…...
B2主题优化:WordPress文章每次访问随机增加访问量
老站长都知道,一个新站刚开始创建,内容也不多的时候,用户进来看到文章浏览量要么是0,要么是 个位数,非常影响体验,就会有一种“这个网站没人气,看来不行”的感觉。 即使你的内容做的很好&#x…...
大模型部署手记(1)ChatGLM2+Windows GPU
1.简介: 组织机构:智谱/清华 代码仓:https://github.com/THUDM/ChatGLM2-6B 模型:THUDM/chatglm2-6b 下载:https://huggingface.co/THUDM/chatglm2-6b 镜像下载:https://aliendao.cn/models/THUDM/chat…...
Rust Rocket: 构建Restful服务项目实战
前言 这几天我的笔记系统开发工作进入了搬砖期,前端基于Yew,后端基于Rocket。关于Rocket搭建Restful服务,官方也有介绍,感觉很多细节不到位。因此我打算花2到3天的时间来整理一下,也算是对自己的一个交代。 对于有一…...
苹果签名有多少种类之TF签名(TestFlight签名)是什么?优势是什么?什么场合需要应用到?
(一)TestFlight 能够让您:邀请内部和外部的测试人员为应用程序提供反馈。 跟踪应用程序在测试过程中发现的 bug 和用户体验问题。 收集 Crash 报告,了解应用程序在真实设备上的运行状况。 要使用 TestFlight,您可以按照…...
如何将图片存到数据库(以mysql为例), 使用ORM Bee更加简单
如何将图片存到数据库 1. 创建数据库: 2. 生成Javabean public class ImageExam implements Serializable {private static final long serialVersionUID 1596686274309L;private Integer id;private String name; // private Blob image;private InputStream image; //将In…...
【“栈、队列”的应用】408数据结构代码
王道数据结构强化课——【“栈、队列”的应用】代码,持续更新 链式存储栈(单链表实现),并基于上述定义,栈顶在链头,实现“出栈、入栈、判空、判满”四个基本操作 #include <stdio.h> #include <…...
es的nested查询
一、一层嵌套 mapping: PUT /nested_example {"mappings": {"properties": {"name": {"type": "text"},"books": {"type": "nested","properties": {"title": {"t…...
<一>Qt斗地主游戏开发:开发环境搭建--VS2019+Qt5.15.2
1. 开发环境概述 对于Qt的开发环境来说,主流编码IDE界面一般有两种:Qt Creator或VSQt。为了简单起见,这里的操作系统限定为windows,编译器也通用VS了。Qt版本的话自己选择就可以了,当然VS的版本也是依据Qt版本来选定的…...
python:进度条的使用(tqdm)
摘要:为python程序进度条,可以知道程序运行进度。 python中,常用的进度条模块是tqdm,将介绍tqdm的安装和使用 1、安装tqdm: pip install tqdm2、tqdm的使用: (1)在for循环中的使用࿱…...
Java类型转换和类型提升
目录 一、类型转换 1.1 自动类型转换(隐式) 1.1.1 int 与 long 之间 1.1.2 float 与 double 之间 1.1.3 int 与 byte 之间 1.2 强制类型转换(显示) 1.2.1 int 与 long 之间 1.2.2 float 与 double 之间 1.2.3 int 与 d…...
C# 读取 Excel xlsx 文件,显示在 DataGridView 中
编写 read_excel.cs 如下 using System; using System.Collections.Generic; using System.ComponentModel; using System.IO; using System.Data; using System.Linq; using System.Text; using System.Data.OleDb;namespace ReadExcel {public partial class Program{static…...
Docker02基本管理
目录 1、Docker 网络 1.1 Docker 网络实现原理 1.2 Docker 的网络模式 1.3 网络模式详解 1.4 资源控制 1.5 进行CPU压力测试 1.6 清理docker占用的磁盘空间 1.7 生产扩展 1、Docker 网络 1.1 Docker 网络实现原理 Docker使用Linux桥接,在宿主机虚拟一个Docke…...
Scala第十章
Scala第十章 章节目标 1.数组 2.元组 3.列表 4.集 5.映射 6.迭代器 7.函数式编程 8.案例:学生成绩单 scala总目录 文档资料下载...
10.4 校招 实习 内推 面经
绿泡*泡: neituijunsir 交流裙 ,内推/实习/校招汇总表格 1、校招 | 集度2024届秋招正式启动(内推) 校招 | 集度2024届秋招正式启动(内推) 2、校招 | 道通科技2024秋季校园招聘正式启动啦! …...
从0开始深入理解并发、线程与等待通知机制(中)
一,深入学习 Java 的线程 线程的状态/生命周期 Java 中线程的状态分为 6 种: 1. 初始(NEW):新创建了一个线程对象,但还没有调用 start()方法。 2. 运行(RUNNABLE):Java 线程中将就绪(ready)和…...
UE5报错及解决办法
1、编译报错,内容如下: Unable to build while Live Coding is active. Exit the editor and game, or press CtrlAltF11 if iterating on code in the editor or game 解决办法 取消Enable Live Coding勾选...
怎么通过docker/portainer部署vue项目
这篇文章分享一下如何通过docker将vue项目打包成镜像文件,并使用打包的镜像在docker/portainer上部署运行,写这篇文章参考了vue-cli和docker的官方文档。 首先,阅读vue-cli关于docker部署的说明,上面提供了关键的几个步骤。 从上面…...
【面试经典150 | 矩阵】旋转图像
文章目录 写在前面Tag题目来源题目解读解题思路方法一:原地旋转方法二:翻转代替旋转 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更…… 专栏内容以分析题目为主,并附带…...
机器人制作开源方案 | 家庭清扫拾物机器人
作者:罗诚、李旭洋、胡旭、符粒楷 单位:南昌交通学院 人工智能学院 指导老师:揭吁菡 在家庭中我们有时无法到一些低矮阴暗的地方进行探索,比如茶几下或者床底下,特别是在部分家庭中,如果没有及时对这些阴…...
C++算法 —— 动态规划(8)01背包问题
文章目录 1、动规思路简介2、模版题:01背包第一问第二问优化 3、分割等和子集4、目标和5、最后一块石头的重量Ⅱ 背包问题需要读者先明白动态规划是什么,理解动规的思路,并不能给刚接触动规的人学习。所以最好是看了之前的动规博客࿰…...
ASUS华硕天选4笔记本FA507NU7735H_4050原装出厂Win11系统
下载链接:https://pan.baidu.com/s/1puxQOxk4Rbno1DqxhkvzXQ?pwdhkzz 系统自带网卡、显卡、声卡等所有驱动、出厂主题壁纸、Office办公软件、MyASUS华硕电脑管家、奥创控制中心等预装程序...
金蝶OA server_file 目录遍历漏洞
漏洞描述 金蝶OA server_file 存在目录遍历漏洞,攻击者通过目录遍历可以获取服务器敏感信息 漏洞影响 金蝶OA 漏洞复现 访问漏洞url: 漏洞POC Windows服务器: appmonitor/protected/selector/server_file/files?folderC://&suffi…...
做外贸接私单的网站/推广方案策略怎么写
大家下午好 今天我们来完成最后一步,sharepoint2007升级2010。其实我反倒没有那么紧张了,因为我最担心的数据库升级,已经过了。 OK,话不多说,让我们直接开始吧。 首先,我们先将所有sharepoint服务停掉 然后…...
wordpress本地运行速度慢/seo运营人士揭秘
题目描述 一个直角三角形,已知两条直角边的长x和y,求斜边z的长度并输出。已知求斜边长的公式为: 输入要求 输入两个浮点数代表两条直角边的长。假设数据都是有效的。 输出要求 计算斜边的长度并输出。保留2位小数。 输入样例 3 4输出样…...
漫画做视频在线观看网站/营销网站建设免费
打开文件:使用open()函数打开文件,第二个参数规定打开文件的模式,如:读取(r)。读取文件:使用fread()函数读取打开的文件,第二个参数规定待读取的最大字节数。关闭文件:使用fclose()函数关闭打开…...
旅游网站开发与建设论文/淘宝推广方法有哪些
Docker基于LXC实现了把软件封装到一个完整的文件系统,可以在docker容器中运行所需的一切代码,运行环境,系统工具和系统库。由于docker使用独立于主机的文件系统,可以确保软件在不同的主机环境中仍然保持运行环境不变。docker与主机…...
wordpress文章禁止搜索/百度推广代理商名单
Ribbon Spring Cloud Ribbon是基于Netlix Ribbon实现的一套客户端负载均衡的工具。 简单的说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法和服务调用。 概述 负载均衡(LB,Load Balance)是什么 就是将用户的请求…...
网络安全设计报告/网络公司seo教程
一、什么是Spring Cloud Consul? Spring Cloud Consul 为 SpringBoot 应用提供了 Consul的支持,Consul既可以作为注册中心使用,也可以作为配置中心使用。Spring Cloud Consul 是HashiCorp公司推出的开源软件,提供了微服务系统中的…...