2016-08-21 20 views
0

NodeJSアプリケーションを使用しています。ここでは、ExcelJSをルートの1つ(Expressで動作)で使用しています。次のスニペットでは、単純なループがExcelファイルから行を読み込み、配列に挿入することになっています。しかし、彼らは挿入されていないようです。私は、彼らがログインしているとして、コンソール内の値を見ることができていますようconsole.logラインが、うまく動作することを値が配列に挿入されない

router.get('/work', function(req, res, next) { 
    var posts = []; 
    var workbook = new Excel.Workbook(); 
    workbook.xlsx.readFile(file).then(function() { 
     var worksheet = workbook.getWorksheet(1); 
     worksheet.eachRow({ includeEmpty: true }, function(row, rowNumber) { 
      console.log(JSON.stringify(row.values)); 
      posts.push(JSON.stringify(row.values)); 
     }); 
    }); 
    res.json(posts); 
}); 

。しかし、値は何らかの理由でpostsアレイに挿入されません。誰にも分かりますか?

答えて

6

この操作は非同期ですので、あなたがあなたのCSVを読ん完了した後に戻ってあなたのアレイを送信する必要があります:約束はで返される前に、あなたはすぐに、あなたの空の配列との要求を終了して、前に

router.get('/work', function(req, res, next) { 
    var posts = []; 
    var workbook = new Excel.Workbook(); 
    workbook.xlsx.readFile(file).then(function() { 
     var worksheet = workbook.getWorksheet(1); 
     worksheet.eachRow({ includeEmpty: true }, function(row, rowNumber) { 
      console.log(JSON.stringify(row.values)); 
      posts.push(JSON.stringify(row.values)); 
     }); 
     res.json(posts); // moved within the callback to `then` 
    }); 
}); 

readFileが解決され、CSVの値を入力することができます。

+0

あなたの答えをありがとう、しかし、私はあなたが上記のコードで何が変更されたかわかりません。それは私のものと同じであるようです。それが意図的に行われた場合は、あなたが示唆しているものの例を挙げていただけますか? – DemCodeLines

+2

@DemCodeLinesこれは同一ではありませんが、視覚的に判断することは間違いありません。私は(うまくいけば)事を明確にするコメントを追加しました –

+0

ありがとう、それは今意味があります。 – DemCodeLines

関連する問題