2017-07-13 18 views
1

我已經寫過函數爲csvFileToArray的簡單JS對象。函數應該返回解析的CSV數組。傳遞給readFileSync的匿名函數沒有返回任何數據

問題是我沒有輸出來自傳遞給readFileSync的匿名函數。

test1被鎖定爲正確的控制檯,但是test2不是。

這是我第一次使用node.js我做錯了什麼?

var passwdArray = []; 
var csv = function() { 
     this.csvFileToArray = function (fileName, delimiter) { 
       console.log("test1"); 
       var fs = require('fs'); 
       fs.readFileSync(fileName, 'utf8', function(err, data) { 
         console.log("test2"); 
         if (err) { 
           throw err; 
         } else { 
           var csvLineArray = data.split("\n"); 
           var csvArray = []; 
           csvArray['header'] = csvLineArray[0].split(delimiter); 
           csvArray['data'] = []; 
           for(var i = 1; i < csvLineArray.length; i++) { 
             csvArray['data'].push(csvLineArray[i].split(delimiter)); 
           } 
           return csvArray; 
         } 
       }); 
     } 
} 

var csvHandler = new csv(); 

var test =csvHandler.csvFileToArray('test.csv', ','); 
console.log(test); 
+1

你的csvhandler函數沒有任何回調,這就是爲什麼它不工作 –

回答

2

您正在使用readFileSync函數和它的工作同步。所以你不能在它內部使用回調。 DOC

所以,你可以用它喜歡:

var passwdArray = []; 
var csv = function() { 
    this.csvFileToArray = function (fileName, delimiter) { 
     console.log("test1"); 
     var fs = require('fs'); 
     var data = fs.readFileSync(fileName, 'utf8'); 
     var returnedData = doSomething(null,data); 
     console.log(returnedData); 
    } 
}; 

function doSomething(err, data) { 
    console.log("test2"); 
    if (err) { 
     throw err; 
    } else { 
     var csvLineArray = data.split("\n"); 
     var csvArray = []; 
     csvArray['header'] = csvLineArray[0].split(delimiter); 
     csvArray['data'] = []; 
     for(var i = 1; i < csvLineArray.length; i++) { 
      csvArray['data'].push(csvLineArray[i].split(delimiter)); 
     } 
     return csvArray; 
    } 
}; 

var csvHandler = new csv(); 

var test =csvHandler.csvFileToArray('test.csv', ','); 
console.log(test); 

如果你想用它異步,您可以使用READFILE功能。