FileReader输出未定义

FileReader output undefined

本文关键字:未定义 输出 FileReader      更新时间:2023-09-26

我有一个函数,它以Blob为输入,并吐出二进制字符串(理想情况下应该是)

function chunkBinary(chunkFile){
    var reader = new FileReader();
    reader.onloadend = (function(reader)
    {
        return function()
        {
            console.log(reader.result);
            return reader.result
        }
    })(reader);
    reader.readAsBinaryString(chunkFile);
}

我将此函数分配给另一个函数中的变量

function showUploadProgress(){
    for (var i=0; i<chunk.length; i++) {
        if(chunk[i][0] != 'No Error'){
            errorUploadFiles[j] = chunk[i];
            j++;
        } 
            //j starts from 4 as chunk[i][0..3] has some file data and then the blobs start from 4
            for(var j = 4; j < chunk[i].length ; j++){
                var chunkInBinary = chunkBinary(chunk[i][j]);   
                console.log(chunkInBinary);    
     }
 }

问题是chunkInBinary的值总是未定义的,当我在chunkBinary函数中打印它时,我可以查看它。我曾尝试使用闭包,但由于某种原因,我无法使其工作。请提出建议。

正如其他人所指出的,chunkBinary()现在没有返回任何内容(您的return result;语句特别返回给任何人,因为onloadend是由框架本身调用的,所以值会被丢弃)。

因为FileReader执行异步读取,所以不能直接从中返回值

function chunkBinary(chunkFile){
    return new Promise(
      function(resolve, reject) {
        var reader = new FileReader();
        reader.onloadend = (function(reader)
        {
          function()
          {
            console.log(reader.result);
            resolve(reader.result);
          }
        })(reader);
        reader.readAsBinaryString(chunkFile);
      });
}

然后,当读取完成时,调用者将可以访问这样的值:

chunkBinary(file).then(function(binaryString) {
  // do something with result here
});