解决vue中reader.onload读取文件的异步问题
更新时间:2022年10月09日 15:48:05 作者:十二点的洛杉矶
这篇文章主要介绍了解决vue中reader.onload读取文件的异步问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
reader.onload读取文件的异步问题
问题
用element上传文件组件上传文件,然后在前端读取,由于reader.onload读取文件是异步的会造成return回去的数据无法被获取
export function import_excel_to_json(file){ let jsonData = {} let reader = new FileReader() reader.readAsArrayBuffer(file) reader.onload = function () { let buffer = reader.result let bytes = new Uint8Array(buffer) let length = bytes.byteLength let binary = '' for (let i = 0; i < length; i++) { binary += String.fromCharCode(bytes[i]) } let XLSX = require('xlsx') let wb = XLSX.read(binary, { type: 'binary' }) wb.SheetNames.map(item=>{ jsonData[item] = XLSX.utils.sheet_to_json(wb.Sheets[item]) jsonData[item].shift() }) return jsonData } }) }
在外部调用该函数:
let data = this.import_excel_to_json(File)
data获取不到返回值
解决
用Promise进行处理
export function import_excel_to_json(file){ return new Promise(function (resolve, reject) { let jsonData = {} let reader = new FileReader() reader.readAsArrayBuffer(file) reader.onload = function () { let buffer = reader.result let bytes = new Uint8Array(buffer) let length = bytes.byteLength let binary = '' for (let i = 0; i < length; i++) { binary += String.fromCharCode(bytes[i]) } let XLSX = require('xlsx') let wb = XLSX.read(binary, { type: 'binary' }) wb.SheetNames.map(item=>{ jsonData[item] = XLSX.utils.sheet_to_json(wb.Sheets[item]) jsonData[item].shift() }) resolve(jsonData); } }) }
reader.onloadend异步返回结果问题
原本想直接return,但因为read.onloadend是异步任务,无法获取到。
因此可以使要读取文件的函数返回值为一个promise,这样便可解决这一问题。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
element 结合vue 在表单验证时有值却提示错误的解决办法
这篇文章主要介绍了element 结合vue 在表单验证下,有值却提示错误的解决办法,需要的朋友可以参考下2018-01-01vue中改变了vuex数据视图不更新,也监听不到的原因及解决
这篇文章主要介绍了vue中改变了vuex数据视图不更新,也监听不到的原因及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2023-03-03el-form-item prop属性动态绑定不生效问题及解决
这篇文章主要介绍了el-form-item prop属性动态绑定不生效问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-07-07Vue 路由组件向app.vue主文件传值的方式(两种常见方式)
在Vue.js中,可以使用路由传参的方式向App.vue主页面传递数据,有多种方法可以实现这一目标,本文结合实例代码给大家介绍的非常详细,需要的朋友参考下吧2023-11-11基于Electron24+Vite4+Vue3搭建桌面端应用实战教程
这篇文章主要介绍了基于Electron24+Vite4+Vue3搭建桌面端应用,这次给大家主要分享的是基于electron最新版本整合vite4.x构建vue3桌面端应用程序,需要的朋友可以参考下2023-05-05
最新评论