我有一个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
数组中。谁知道为什么?
答案 0 :(得分: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中的值填充它。