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

时间:2015-04-24 10:34:58

标签: 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;
}

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

1 个答案:

答案 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);
}