2017-01-28 86 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