2017-04-17 65 views
0

我剛剛注意到FileReader API跳過handleFiles(appCSV),而是返回undefinedFileReader API跳過我的方法,即使它只有2.5 MB,並使用Chrome 57

appDictionary = handleFiles(appCSV); 
dbDictionary = handleFiles(dbCSV); 

appCSV文件大小剛好2584729 bytes或只有約2.5 MB。是由於這個問題?

這很奇怪,因爲我已經在使用Chrome 57

請幫助我調查並提供解決方案或解決方法。謝謝!

handleFiles的函數體:

function handleFiles(files) { 
    // Check for the various File API support. 
    if (window.FileReader) { 
     // FileReader are supported. 
     getAsText(files[0]); 
    } else { 
     alert('FileReader are not supported in this browser.'); 
    } 
} 

function getAsText(fileToRead) { 

    let reader = new FileReader(); 
    // Handle errors load 
    reader.onload = loadHandler; 
    reader.onerror = errorHandler; 
    // Read file into memory as UTF-8  
    reader.readAsText(fileToRead); 

} 

function loadHandler(event) { 
    let csv = event.target.result; 
    processDataToDictionary(csv); 
} 

function errorHandler(evt) { 
    if (evt.target.error.name == "NotReadableError") { 

     alert("Cannot read file!"); 

    } 
} 
+1

你能展示這個'handleFiles'函數的主體嗎?但是正如它所寫的,我已經可以做出一個有教育的猜測,即你不是在等待FileReader的onload事件,它的所有'readAs ...'方法都是異步的。 – Kaiido

+2

[我如何從異步調用返回響應?](http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call) – Kaiido

+0

@Kaiido嗨,我發佈了'handleFiles'函數的主體。 IT不會跳過'dbDictionary = handleFiles(dbCSV);'儘管只有'appDictionary'。請幫助我調查。 – JPaulPunzalan

回答

0

我已經解決我自己的問題。這是因爲FileReader API的事件onLoadasynchronous

所以我決定把handleFiles()函數放在onchange() propertyinput type = 'file'

相關問題