我正在尝试读取使用html页面上的输入类型文件选择的文件。我已经实现了读取文件的功能,并且可以读取文件内容。但实际问题是文件内容的读取正在异步,这允许脚本的其他功能执行。我正在将数据的内容存储在数组中。
移动到其他函数时,数组为空。当引入延迟时,阵列具有内容。任何人都可以帮助我解决这个问题,而不会引起延迟吗?
我的阅读文件的代码是
var getBinaryDataReader = new FileReader();
getBinaryDataReader.onload = (function(theFile) {
return function(frEvnt)
{
file[fileCnt]=frEvnt.target.result;
}
})(document.forms[formPos].elements[j].files[0]);
getBinaryDataReader.readAsBinaryString(document.forms[formPos].elements[j].files[0]);
提前致谢。
答案 0 :(得分:5)
我认为你必须通过异步调用(比如Ajax)做你一直要做的事情:将需要稍后运行的代码移动到读取文件时执行的回调中。
getBinaryDataReader.onload = function(theFile) {
// theFile.target.result has your binary
// you can move it into the array
// (I think you are already doing this properly)
// but then ...
nowCallTheOtherCodeThatNeedsToRunLater();
// or if you want to wait until all elements
// in the array are downloaded now
if (myArrayIsFullNow()){
callTheCodeThatNeedsTheFullArray();
}
// else: do nothing, the final file to finish downloading
// will trigger the code
}