亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

解決vue中reader.onload讀取文件的異步問(wèn)題

 更新時(shí)間:2022年10月09日 15:48:05   作者:十二點(diǎn)的洛杉磯  
這篇文章主要介紹了解決vue中reader.onload讀取文件的異步問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

reader.onload讀取文件的異步問(wèn)題

問(wèn)題

用element上傳文件組件上傳文件,然后在前端讀取,由于reader.onload讀取文件是異步的會(huì)造成return回去的數(shù)據(jù)無(wú)法被獲取

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進(jìn)行處理

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é)果問(wèn)題

原本想直接return,但因?yàn)閞ead.onloadend是異步任務(wù),無(wú)法獲取到。

因此可以使要讀取文件的函數(shù)返回值為一個(gè)promise,這樣便可解決這一問(wèn)題。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論