来自JavaScript FileReader的onload事件计算的返回值

7

我有这个函数:

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个回答

16

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

1
没有想法。这个答案似乎没有任何问题。 - Phylogenesis
1
@Phylogenesis 我也是一样。我不知道为什么有些人会随意点踩 :( - Vigneswaran Marimuthu
1
还可以注意到,在Firefox中只有在Web Worker上下文中才有同步的FileReader API(https://developer.mozilla.org/en-US/docs/Web/API/FileReaderSync#readAsArrayBuffer())。 - Phylogenesis
1
@Phylogenesis 感谢分享 :) - Vigneswaran Marimuthu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接