2017-01-28 52 views
1

我下面的电子文件系统教程这里没有到达:从js函数返回数据调用函数

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中。但是我所有的返回数据的尝试(特别是'返回数据',无论是最后一行还是最后一个大括号之前)都失败了。调用函数不会获得数据。

调用函数是否可能需要等待这个完成?或者,更可能的是,我只是没有从这种类型的函数中正确地返回数据。任何帮助深表感谢。

回答

0

由于您的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; 
     }); 
    } 
+0

这工作得很好。这样我也可以从ctrl-L以及文件菜单中调用它,并右键单击背景。这应该让我做所有这些。谢谢。 –

0

据我了解,这应该做你想做的。

//更新;从“返回”改为回调函数。

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; 
     }); 
    } 
+0

这是行不通的,'fs.readFile'是异步功能和ReadFile函数将立即没有返回值。 – abhishekkannojia

+0

检查我的更新,它现在使用回调。 – user2267175