值未插入数组中

时间:2016-08-21 20:15:27

标签: javascript arrays node.js

我有一个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数组中。谁知道为什么?

1 个答案:

答案 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中的值填充它。