2016-03-01 66 views
0

我有一個非常簡單的功能,即讀文件與HTML 5的FileReader:傳遞額外的參數來回調函數

var reader = new FileReader(); 
var currentFileType = file.type; 
reader.onloadend = readCompleted; 
reader.onerror = fail; 

reader.readAsArrayBuffer(file); 

和readCompleted回調函數看起來是這樣的:

function readCompleted(evt) { 
     if (evt.target.readyState != FileReader.DONE) { 
      return; 
     } 

     // The binary data is the result. 
     var requestData = evt.target.result; 

     // SOME MORE CODE HERE 
    } 

事情是'evt'參數默認傳遞。如何將一個附加參數傳遞給此回調函數以使currentFileType變量可用?我想這個函數簽名看起來像這樣:function readCompleted(evt, fileType) {//code here}和某種方式傳遞currentFileType它。

回答

1

只是分配一個不同的功能reader.onloadend

reader.onloadend = function(evt) { 
    readCompleted(evt, currentFileType); 
}; 
1

您可以使用Function.bind將其分配給onloadend之前的函數參數綁定。

例如:

var a = function() { console.log(arguments); } 
var b = a.bind(null, 123) 
b('abc') // -> [123, "abc"] 

在你的情況,這將是:

reader.onloadend = readCompleted.bind(null, file.type); 

readCompleted應具有以下特徵:

function readCompleted(fileType, evt) { ... } 
0

你可以這樣寫,

var reader = new FileReader(); 
var currentFileType = file.type; 
reader.onloadend = function(evt){ 
    readCompleted(evt,currentFileType); 
}; 
reader.onerror = fail; 

的readCompleted會這個樣子,

function readCompleted(evt,ft) { //code... }