我试图绕着阅读器对象。
我有这个功能,目前我是console.log(this.result)
,但我希望在触发事件后返回它。
readFile = function(fs, filename){
fs.root.getFile(filename, {}, function(fileEntry){
//this object reads files.
var reader = new FileReader();
//register callback for read files
reader.onloadend=function(e){
//this is what i want to return
console.log(JSON.parse(this.result));
};
//read file-function
fileEntry.file(function(file){
reader.readAsText(file);
},errorHandler);
},errorHandler);
};
简单地按照这样的方式重新启动它就不会起作用
readFile = function(fs, filename){
fs.root.getFile(filename, {}, function(fileEntry){
//this object reads files.
var reader = new FileReader();
//register callback for read files
reader.onloadend=function(e){
//this is what i want to return
return JSON.parse(this.result);
};
//read file-function
fileEntry.file(function(file){
reader.readAsText(file);
},errorHandler);
},errorHandler);
};
console.log(readFile(foo, bar))
将输出未定义的内容,似乎在reader.onloadend
运行之前触发了返回。
答案 0 :(得分:0)
我通过传递回调来返回值:
readFile = function(fs, filename, callback){
if(!fs){
console.log('no filesystem registered')
return;
}
fs.root.getFile(filename, {}, function(fileEntry){
//this object reads files.
var reader = new FileReader();
//register callback for read files
reader.onloadend = function(e){
callback(JSON.parse(this.result))
};
//read file-function
fileEntry.file(function(file){
reader.readAsText(file);
},errorHandler);
},errorHandler);
};
errorHandler = function(e) {
console.log('Error: ', e);
};