我在这里遵循了Electron文件系统教程:
How to choose , read, save, delete or create a file with Electron Framework
其中包括以下代码,用于弹出加载文件对话框:
document.getElementById('select-file').addEventListener('click',function(){
dialog.showOpenDialog(function (fileNames) {
if(fileNames === undefined){
console.log("No file selected");
}else{
document.getElementById("actual-file").value = fileNames[0];
readFile(fileNames[0]);
// myData = readFile(fileNames[0]); <---
}
});
},false);以及用于实际读取文件的以下代码:
function readFile(filepath) {
fs.readFile(filepath, 'utf-8', function (err, data) {
if(err){
alert("An error ocurred reading the file :" + err.message);
return;
}
document.getElementById("content-editor").value = data;
});
}如您所见,最后一行使用导入的数据更新DOM。但是,我希望将数据返回给我的调用函数,因为它不是HTML。注意第一个片段末尾的注释行。这就是我想做的事情。
实际上,必须处理的是XML,而不是转储到DOM中。但是我所有返回数据的尝试都失败了(特别是'return data;‘最后一行在哪里,或者在最后一个花括号之前)。这两种方法都不会导致调用函数获取数据。
是否有可能调用函数需要等待这个函数完成?或者,更有可能的是,我没有从这种类型的函数中正确返回数据。任何帮助都是非常感谢的。
发布于 2017-01-28 12:19:22
由于您的readFile(filepath)正在执行异步文件读取操作,因此不能在此处使用简单的返回。但是,您可以将回调传递给readFile函数,并在以后完成对数据的读取操作时调用它。就像这样。
创建回调
function fileReadComplete(data) {
myData = data;
// Do whatever you want
}并将其称为。
readFile(fileNames[0], fileReadComplete);更改您的readfile函数:
function readFile(filepath, callback) {
fs.readFile(filepath, 'utf-8', function (err, data) {
if(err){
alert("An error ocurred reading the file :" + err.message);
return;
}
callback(data);
document.getElementById("content-editor").value = data;
});
}发布于 2017-01-28 12:17:15
据我所知,这应该是你想要的。
// Update,由return改为回调函数
document.getElementById('select-file').addEventListener('click',function(){
dialog.showOpenDialog(function (fileNames) {
if(fileNames === undefined){
console.log("No file selected");
}else{
document.getElementById("actual-file").value = fileNames[0];
readFile(fileNames[0], function(myData){
console.log(myData);
});
}
});
},false);
function readFile(filepath, callBack) {
fs.readFile(filepath, 'utf-8', function (err, data) {
if(err){
alert("An error ocurred reading the file :" + err.message);
return;
}
callBack(data);
//document.getElementById("content-editor").value = data;
});
}https://stackoverflow.com/questions/41906218
复制相似问题