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

VUE + 小程序 关于前端循环上传附件页面卡死的问题

最开始我使用for循环,后端能正常保存,但是前端页面卡死了,开始代码是这么写的

    wx.showLoading({title: '文件上传中...',mask: true // 是否显示透明蒙层,防止触摸穿透,默认:false});const {fileList} = that.data;that.setData({"fileResult": []});console.log("开始处理附件上传");for (var file of fileList) {uploadFile({"folder": "carfj","fjlxdm": "CARFJ","ywid": pkid}, file).then(res => {console.log("得到上传成功后的数据");console.log(res);const {fileResult} = that.data;fileResult.push(res);that.setData({"fileResult": fileResult});});}console.log("上传结果检查中...");while (true) {const {fileList,fileResult} = that.data;if (fileList.length == fileResult.length) {break;}}wx.hideLoading();
 

你当前的代码存在几个问题,导致前端没有得到上传文件的返回值:

  1. 异步操作未等待:你在循环中调用了 ​uploadFile​,但没有等待这些异步操作完成。因此,​while​ 循环会立即执行,而不是等待所有文件上传完成。
  2. 无限循环​while (true)​ 会导致无限循环,这会阻塞主线程,使得小程序无法响应其他事件。
  3. 数据更新问题​setData​ 是异步的,你在循环中更新 ​fileResult​,但这个更新可能不会立即反映在 ​that.data​ 中。

为了解决这些问题,你可以使用 ​Promise.all​ 来等待所有上传操作完成,而不是使用 ​while​ 循环。以下是修改后的代码:

//上传附件wx.showLoading({title: '文件上传中...',mask: true // 是否显示透明蒙层,防止触摸穿透,默认:false});const {fileList} = that.data;that.setData({"fileResult": []});console.log("开始处理附件上传");// 创建一个数组来存储所有的上传 Promiseconst uploadPromises = fileList.map(file => {return uploadFile({"folder": "carfj","fjlxdm": "CARFJ","ywid": pkid}, file).then(res => {console.log("得到上传成功后的数据");console.log(res);const {fileResult} = that.data;fileResult.push(res);that.setData({"fileResult": fileResult});});});// 等待所有上传操作完成Promise.all(uploadPromises).then(() => {wx.hideLoading();console.log("所有文件上传完成");}).catch(err => {console.log("文件上传失败", err);wx.showToast({title: "文件上传失败",icon: 'none',mask: true,});wx.hideLoading();return;});

http://www.lryc.cn/news/395102.html

相关文章:

  • 【基础算法总结】分治—归并
  • 基于Java+SpringMvc+Vue技术的实验室管理系统设计与实现(6000字以上论文参考)
  • 19_谷歌GoogLeNet(InceptionV1)深度学习图像分类算法
  • clickhouse高可用可拓展部署
  • QT中QDomDocument读写XML文件
  • sql盲注
  • 星网安全产品线成立 引领卫星互联网解决方案创新
  • Adam自适应动量优化算法
  • Mac OS系统中Beyond Compare 4破解方式
  • 6000元最好的家用投影仪:当贝X5S Pro六千元配置最高画质最强
  • #### golang中【堆】的使用及底层 ####
  • OpenAI Gym Atari on Windows
  • Java进阶----接口interface
  • 【网络协议】ISIS
  • 一.4 处理器读并解释储存在内存中的指令
  • 【Android面试八股文】Android性能优化面试题:怎样检测函数执行是否卡顿?
  • C语言7 控制语句
  • go mod 依赖管理补充2
  • 【Git】取消追踪多个文件或目录
  • 【Linux详解】进程等待 | 非阻塞轮询
  • 聊一下Maven打包的问题(jar要发布)
  • JavaScript中,正则表达式所涉及的api,解析、实例和总结
  • 【计算机】同步/异步
  • 谈大语言模型动态思维流程编排
  • 工厂自动化相关设备工业一体机起到什么作用?
  • 哈佛大学 || 概念空间中学习动态的涌现:探索隐藏能力
  • Dockerfile打包部署常用操作
  • ArcGIS:探索地理信息系统的强大功能与实际应用
  • Python 全栈体系【三阶】(二)
  • 【VUE】 深入理解 Vue 动态路由:简介、实际开发场景与代码示例