从javascript FileReader onload事件计算的返回值

dom*_*ato 6 javascript callback onload filereader

我有这个功能:

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;
}
Run Code Online (Sandbox Code Playgroud)

现在,该函数在onload事件完成之前完成,因此doStuff总是返回"".我认为回调是我需要的,但我是javascript的新手,在这种情况下我无法理解如何实现它.

Vig*_*thu 12

使用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);
}
Run Code Online (Sandbox Code Playgroud)

您甚至可以传递一个回读函数,该函数将在读取文件后执行.

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);
}
Run Code Online (Sandbox Code Playgroud)