return 从 javascript FileReader onload 事件计算的值

return value calculated from javascript FileReader onload event

我有这个功能:

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 总是 returns ""。我认为回调是我需要的,但我是 javascript 的新手,在这种情况下我不知道如何实现它。

使用文件Reader读取文件是异步操作。将您的逻辑放在文件 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);
}