2016-03-01 114 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... }