2017-07-19 25 views
-1

下面的代碼都有了.... promise.then(結果),而無需等待讀取完成文件執行了一個錯誤:錯誤jQuery的遞延代碼

doAsyncReadFromDisk = function(myReader) 
{ 
    var deferred = $.Deferred(); 
    myReader.onload = function(event) { 
     deferred.resolve(event.target.result); 
    }; 
    myReader.onerror = function() { 
     deferred.reject(this); 
    }; 

    var rgReceivedFiles = document.getElementById('gdeReadFromDisk'); 
    console.log('Selected file: ' + rgReceivedFiles.files.item(0).name); 
    myReader.readAsText(rgReceivedFiles.files.item(0)); 
    return deferred.promise(); 
} // doAsyncReadFromDisk() 

catalogFileParseCB = function(){ 
    var fileReader = new FileReader(); 
    var myPromise = doAsyncReadFromDisk(fileReader); 
    //alert('Space holder to let file read finish!'); 
    myPromise.then(console.log(fileReader.result)); 
} // catalogFileParseCB 

alert('Space holder to let file read finish!'); 

行未註釋,文件內容正常可用。因此,結論是myPromise.then(...)調用正在執行而不等待延遲調用的解決方案。

這對文件〜200MB(實數)數據以及較小的文件(測試數據)都會失敗。無法找到問題,我傾向於認爲問題不是

想知道是否有人能夠幫助識別錯誤。有沒有更好的方法來做到這一點?我們保證一次只讀取一個文件,但應該縮放數GB的數據大小。

感謝您的時間,欣賞等

回答

5

.then()的說法是,當承諾解決調用函數。

myPromise.then(function() { 
    console.log(fileReader.result); 
});