您现在的位置是:网站首页> 编程资料编程资料
解决vue中reader.onload读取文件的异步问题_vue.js_
2023-05-24
318人已围观
简介 解决vue中reader.onload读取文件的异步问题_vue.js_
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,这样便可解决这一问题。


以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
您可能感兴趣的文章:
相关内容
- vue用vis插件如何实现网络拓扑图_vue.js_
- vue3+springboot部署到Windows服务器的详细步骤_vue.js_
- vue 实现手动分割日期_vue.js_
- vue 如何处理防止按钮重复点击问题_vue.js_
- vue中的事件触发(emit)及监听(on)问题_vue.js_
- vue中如何动态设置css样式的hover_vue.js_
- Vue组合式API--setup中定义响应式数据的示例详解_vue.js_
- 在react中使用tailwind的问题_React_
- Vue自定义部分页面显示导航栏功能_vue.js_
- React Native系列之Recyclerlistview使用详解_React_
