当前位置: 首页 > news >正文

浏览器的异步行为导致多个文件下载时没有全部执行

此处用例涉及的传参urls,是一个用","拼接的文件url字符串,如"img1.jpg,img2.jpg,img3.jpg"

downloadFile(urls) {// 将URL字符串分割成数组const urlArray = urls.split(',');// 定义一个递归函数来处理每个URLfunction downloadNext(index) {if (index >= urlArray.length) return; // 所有文件下载完毕const url = urlArray[index].trim(); // 去除URL前后的空格console.log("当前下载文件url: ", url);// 创建一个隐藏的<a>标签const tempLink = document.createElement("a");tempLink.style.display = "none";tempLink.href = url;// 从URL中提取文件名和扩展名const filename = url.substring(url.lastIndexOf('/') + 1);tempLink.setAttribute("download", filename);// 如果浏览器不支持download属性,则打开新窗口if (typeof tempLink.download === "undefined") {tempLink.setAttribute("target", "_blank");}// 将<a>标签添加到文档中并触发点击事件document.body.appendChild(tempLink);tempLink.click();// 移除<a>标签document.body.removeChild(tempLink);// 使用setTimeout确保每个文件下载请求之间有间隔setTimeout(() => {downloadNext(index + 1);}, 1000); // 1秒间隔,可以根据需要调整}// 开始下载第一个文件downloadNext(0);}

浏览器的异步行为导致多个文件下载时没有全部执行,当一个文件下载请求被触发后,浏览器可能需要一些时间来处理这个请求,而在这段时间内,下一个文件的下载请求可能已经被触发,导致只有一个文件被下载。

解决这个问题,可以使用异步编程技术(如setTimeoutPromise)来确保每个文件下载请求之间有足够的间隔时间。以下是使用setTimeout的解决方案:


http://www.mrgr.cn/news/63126.html

相关文章:

  • 【Linux网络】TCP_Socket
  • 「Mac畅玩鸿蒙与硬件12」鸿蒙UI组件篇2 - Image组件的使用
  • Git 本地操作(2)
  • kyber算法库打包相关问题
  • 字符串逆序(c语言)
  • Knife4j配置 ▎使用 ▎教程 ▎实例
  • 微服务基础拆分实践(第一篇)
  • 【Linux 从基础到进阶】分布式文件系统的高可用配置
  • DAYWEB69 攻防-Java 安全JWT 攻防Swagger 自动化算法签名密匙Druid 泄漏
  • 关于解决keil中出现乱码的情况处理,搜索框乱码
  • 什么是Javascript,有什么特点
  • 计算机毕业设计——ssm基于微信平台的校园汉服租赁系统的设计与实现演示录像2021微信端
  • XXXX 本地模型替换为 两家 API
  • 环境变量——用户变量和系统变量
  • (实战)WebApi第9讲:EFCore性能优化(IQueryable延迟查询、取消跟踪机制)
  • Python爬虫必备利器:urllib库全面解析
  • 在树莓派 Raspbian 11 上使用 pyenv 安装 Python 3.9
  • Maven 插件
  • 基于单片机的宠物自动喂食系统的设计
  • Vue 动态属性 []
  • 2024年10月总结及随笔之漏更及失而复得
  • 多线程和线程同步基础篇学习笔记(Linux)
  • 微服务实战系列之玩转Docker(十七)
  • 【2024工业图像异常检测文献】SuperSimpleNet: 统一无监督和监督式学习检测快速可靠的表面缺陷检测方法
  • 数字信号处理Python示例(1)使用Python生成正弦信号
  • 模板初阶及STL简介