为File API readAsText创建jQuery Promise

时间:2012-09-25 21:18:15

标签: jquery html5 fileapi deferred promise

我正在使用文件输入元素,用户将使用该元素选择单个文本文件:

<input type="file" id="myfile">

我想创建一个与加载所选文件内容的FileReader对象的异步事件相关联的jQuery Promise。我在各种上下文中尝试了这样的代码,但似乎存在某种类型的计时问题,因为我没有将内容变量传递给then()回调:

var promise = $.Deferred(function(dfd) {
  var file = $("#myfile")[0].files[0];
  var reader = new FileReader();
  reader.onload =  function(event){
    var contents = event.target.result;
    dfd.resolve(contents);
  };
  reader.readAsText(file);
}).promise();

// other code and promises here

$.when(promise).then(function(contents){
  console.log(contents);
});

实际上涉及两个事件。当用户单击“浏览”按钮并选择特定文件时,会发生第一个事件。第二个事件是FileReader加载了所选文件内容。如果有人知道如何正确打包,那么我将保证在解决时保留所选文件的内容,我将非常感谢您的见解。提前谢谢。

0 个答案:

没有答案