2017-07-13 7 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機能を使用していて、動作しています。コールバックを使用することはできません。あなたはreadFileの機能を使用することができます非同期(async)、それを使用したい場合は

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); 

DOC

だから、同じようにそれを使用することができます。

2

あなたはfs.readFileSync(パス[、オプション])とfs.readFile(パス[、オプション]、コールバック)File System | Node.js v8.1.4 Documentationを混合していますか?

使用しているメソッドは、コールバックパラメータを受け入れません。

関連する問題