0
請檢查下面的代碼更新的變量:在reader.onload
段內返回一個子功能
function loadCSV(fileInput) {
var reader = new FileReader();
reader.readAsText(fileInput);
var result = {};
var file = {};
var error = {};
reader.onload = function(evt) {
var csv = evt.target.result;
var data = $.csv.toArrays(csv);
file[fileInput.name] = data;
result['file'] = file;
console.log(result);
}
reader.onerror = function() {
error = {
'message': 'Unable to read ' + fileInput.name
}
result['error'] = error;
}
console.log(result);
return result;
}
的result
是正確的,但返回的result
是空的。我知道這是因爲我正在更新result
中的子函數reader.onload
,我也知道使用loadCSV
的回調是解決問題的一種解決方案。但我想知道是否有任何方法可以使loadCSV
返回更新的result
。
謝謝。
尋找promise模式,例如[jQuery Deferred](http://api.jquery.com/category/deferred-object/)。 – Sirko
filereader API是異步的,您的外部函數在執行回調之前返回。您不能從異步函數返回。另請參閱http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-ajax-call –
@FelixKling - 這是一個很好的線程。 –