我有这个功能:
function doStuff(range, file) {
var fr = new FileReader();
var hash = '';
fr.onload = function (e) {
var out = "stuff happens here";
hash = asmCrypto.SHA256.hex(out);
return hash;
};
fr.readAsArrayBuffer(file);
return hash;
}
现在,该函数在onload事件完成之前完成,因此doStuff总是返回“”。我认为回调是我需要的,但我是javascript的新手,在这种情况下我无法理解如何实现它。
答案 0 :(得分:10)
使用File Reader读取文件是异步操作。将您的逻辑放在文件阅读器的onload
功能中。
function doStuff(range, file) {
var fr = new FileReader();
fr.onload = function (e) {
var out = "stuff happens here";
hash = asmCrypto.SHA256.hex(out);
/* Place your logic here */
};
fr.readAsArrayBuffer(file);
}
您甚至可以传递一个回读函数,该函数将在读取文件后执行。
function doStuff(range, file, callback) {
var fr = new FileReader();
fr.onload = function (e) {
var out = "stuff happens here";
hash = asmCrypto.SHA256.hex(out);
/* Assuming callback is function */
callback(hash);
};
fr.readAsArrayBuffer(file);
}