解決vue中reader.onload讀取文件的異步問題
reader.onload讀取文件的異步問題
問題
用element上傳文件組件上傳文件,然后在前端讀取,由于reader.onload讀取文件是異步的會造成return回去的數(shù)據(jù)無法被獲取
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 } }) }
在外部調(diào)用該函數(shù):
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異步返回結(jié)果問題
原本想直接return,但因為read.onloadend是異步任務(wù),無法獲取到。
因此可以使要讀取文件的函數(shù)返回值為一個promise,這樣便可解決這一問題。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
element 結(jié)合vue 在表單驗證時有值卻提示錯誤的解決辦法
這篇文章主要介紹了element 結(jié)合vue 在表單驗證下,有值卻提示錯誤的解決辦法,需要的朋友可以參考下2018-01-01vue中改變了vuex數(shù)據(jù)視圖不更新,也監(jiān)聽不到的原因及解決
這篇文章主要介紹了vue中改變了vuex數(shù)據(jù)視圖不更新,也監(jiān)聽不到的原因及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03el-form-item?prop屬性動態(tài)綁定不生效問題及解決
這篇文章主要介紹了el-form-item?prop屬性動態(tài)綁定不生效問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07Vue 路由組件向app.vue主文件傳值的方式(兩種常見方式)
在Vue.js中,可以使用路由傳參的方式向App.vue主頁面?zhèn)鬟f數(shù)據(jù),有多種方法可以實現(xiàn)這一目標(biāo),本文結(jié)合實例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧2023-11-11基于Electron24+Vite4+Vue3搭建桌面端應(yīng)用實戰(zhàn)教程
這篇文章主要介紹了基于Electron24+Vite4+Vue3搭建桌面端應(yīng)用,這次給大家主要分享的是基于electron最新版本整合vite4.x構(gòu)建vue3桌面端應(yīng)用程序,需要的朋友可以參考下2023-05-05