2016-08-21 87 views
0

我有一個NodeJS應用程序,我在其中一個路由中使用ExcelJS(由Express驅動)。在下面的代碼片段中,一個簡單的循環應該從Excel文件讀取行,然後將它們插入到數組中。但是,他們似乎並沒有插入。值沒有被插入到數組

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

console.log線工作得很好,因爲我能看到在控制檯中值作爲他們登錄。但是,由於某些原因,這些值不會被插入到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