我有一個對象,它有一個loadFile()
方法來分析一個wav文件。我一直在對象之外使用FileReader
,並從讀取的文件中傳遞loadFile()
,ArrayBuffer
並讓它從那裏接管。我想要有可能的很多對象,所以我想在loadFile()
方法中打包FileReader
,所以我不必爲每個對象處理外部的所有閱讀器代碼。問題是,我不知道這將如何工作。這裏有一個可視代碼:在對象內部使用FileReader
function MyObject() {
this.property;
this.anotherProp;
this.data = new Array(); // array to be filled with PCM data for processing
}
// pass a File object
MyObject.prototype.loadFile = function(file) {
var reader = new FileReader();
reader.readAsArrayBuffer(file);
reader.onload = function(event) {
var buffer = event.target.result;
// do lots of stuff with buffer and eventually fill up this.data[]
}
}
MyObject.prototype.doProcessing = function() {
// process this.data[]
}
var file; // a File object I grabbed from somewhere
var myObj = new MyObject();
myObj.loadFile(file);
myObj.doProcessing();
loadFile()
會發生什麼情況?在我有myObj.data[]
的任何數據之前,loadFile
會返回嗎?還是等待reader.onload
才能退火?如果這是錯誤的做法,我該怎麼做? Aslo,如果我想loadFile()
返回false
如果內部reader.onload
失敗?
可能的解決方案:http://jsfiddle.net/N6vnU/2/
目前的解決方案:我結束了移動文件的解析函數出對象的成網的工作人員,發現FileReaderSync
。現在,我將文件發送給網絡工作人員,並在返回後創建一個包含結果的對象。
add'var self = this;'在讀取器的onload()函數之上,self.data = onload()中的緩衝區,然後在reader.onload()的末尾調用self.doProcessing(),你就是金... – dandavis
謝謝,這部分是led我到我目前的解決方案 –