Javascript JS函数返回null-help

Javascript JS函数返回null-help,javascript,fileapi,Javascript,Fileapi,我试图修改示例,使函数handleFileSelect(evt)返回reader.result;我的意思是让函数返回base64,用于图像之类的对象。 我试图用函数编写它,但它只返回null:( 所以我的问题是如何使函数返回base64 现在我试着写下这个片段 function handleFileSelect(evt) { var files = evt.target.files; // FileList object // Loop through the FileList

我试图修改示例,使函数handleFileSelect(evt)返回reader.result;我的意思是让函数返回base64,用于图像之类的对象。 我试图用函数编写它,但它只返回null:( 所以我的问题是如何使函数返回base64

现在我试着写下这个片段

function handleFileSelect(evt) {
    var files = evt.target.files; // FileList object

    // Loop through the FileList and render image files as thumbnails.
    for (var i = 0, f; f = files[i]; i++) {

      // Only process image files.
      if (!f.type.match('image.*')) {
        continue;
      }

      var reader = new FileReader();

      // Closure to capture the file information.
      reader.onload = (function(theFile) {
        return function(e) {
          // Render thumbnail.
          var span = document.createElement('span');
          span.innerHTML = ['<img class="thumb" src="', e.target.result,
                            '" title="', theFile.name, '"/>'].join('');
          document.getElementById('list').insertBefore(span, null);
        };
      })(f);

      // Read in the image file as a data URL.
      reader.readAsDataURL(f);
    }
    return reader.result;
  }
功能手柄文件选择(evt){
var files=evt.target.files;//文件列表对象
//循环浏览文件列表并将图像文件渲染为缩略图。
for(var i=0,f;f=files[i];i++){
//仅处理图像文件。
如果(!f.type.match('image.*')){
继续;
}
var reader=new FileReader();
//闭包以捕获文件信息。
reader.onload=(函数(文件){
返回函数(e){
//渲染缩略图。
var span=document.createElement('span');
span.innerHTML=['').join('');
document.getElementById('list').insertBefore(span,null);
};
})(f) );
//作为数据URL读入图像文件。
reader.readAsDataURL(f);
}
返回reader.result;
}

非常感谢所有有用的评论:)

我不知道FileReader对象的详细信息,但它看起来像是从URL异步读取数据。这意味着当函数返回reader.result时,FileReader对象还没有完成对文件的读取。直到调用onload回调(或出现其他错误情况)之后,才会结束


因此,当读取仍在异步进行时,函数返回。因此,结果尚未确定。结果将出现在onload回调旁边,或者(我猜)在其他表示错误条件的回调里面(onabort、onerror等)。

19个问题接受答案?请发布给出问题的代码。我也这么认为。但是我想如何让它返回结果?你不能从那个函数返回结果。如果您想知道结果,那么您必须钩住各种事件处理程序(您已经钩住了onload),然后从这些事件处理程序中,您可以将结果传递给需要传递的任何对象。这是异步编程-您必须以不同的方式进行。@jfriend00是的@user592704这是javascript编程的新范例。它可能看起来像C,但它不是C。所以当它作为e.target.result工作时?但是,如果只是通过元素的id调用该元素呢?我的意思是,不是当一个“文件”按钮点击时,而是当它包含一个url时?@user592704:我不理解你的问题。