我正在尝试读取一个文本文件并返回结果。
到目前为止,我能够读取文件,但是当我试图返回结果时,结果会在文件读取完成之前返回。
如何强制函数等待结果?我认为这与回调有关,但不知道如何实现。
MyFile.prototype.readFile = function(fileDir, fileName) {
var strText = "";
window.resolveLocalFileSystemURL(fileDir, gotDir, fail);
function gotDir(dir) {
dir.getFile(fileName, {create: true}, gotFile, fail);
}
function gotFile(fileEntry) {
fileEntry.file(gotRead, fail);
}
function gotRead(file) {
var reader = new FileReader();
reader.onerror = function(evt) {
console.log("Reading " + file.name + " Failed");
};
reader.onloadstart = function(evt) {
console.log("Read " + file.name + " Starting");
};
reader.onload = function(evt) {
console.log("Read " + file.name + " Successful");
};
reader.onloadend = function(evt) {
console.log("Read " + file.name + " Ending");
endRead(evt.target.result);
};
reader.onprogress = function(evt) {
console.log(evt.loaded + " of " + evt.total);
};
reader.readAsText(file);
}
function endRead(value) {
strText = value;
}
//returns null value before file read finishes
return strText;
};发布于 2015-05-04 18:33:32
FileSystem api是异步的,这意味着您必须将一个回调传递给您的readFile方法,该方法在读取文件时将被调用。不可能同步做,see this.
您可以将签名更改为:
MyFile.prototype.readFile = function(fileDir, fileName, endRead) {并删除以下行
function endRead(value) {
strText = value;
}
//returns null value before file read finishes
return strText;现在,您可以将一个函数作为第三个参数传递给readFile方法,并使用该函数的第一个参数访问文件内容。
https://stackoverflow.com/questions/30036946
复制相似问题