值未插入数组中

Dem*_*nes 0 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);
});
Run Code Online (Sandbox Code Playgroud)

console.log行工作正常,因为我能够在记录时看到控制台中的值.但是,由于posts某种原因,这些值不会插入到数组中.谁知道为什么?

Nic*_*lin 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`
    });
});
Run Code Online (Sandbox Code Playgroud)

之前,您在使用空数组终止请求之前,在已readFile解决的promise返回之前,允许您使用CSV中的值填充它.

  • @DemCodeLines它不完全相同,但绝对难以直观地确定.我添加了一条评论(希望)澄清事情 (2认同)