gpt4 book ai didi

Javascript 数组内容在离开函数上下文后消失

转载 作者:行者123 更新时间:2023-11-28 18:56:59 25 4
gpt4 key购买 nike

我正在使用 Node npm 库“ExcelJS”读取 Excel 工作簿的工作表,并使用表示工作表行中找到的数据的对象填充数组。

我不认为这个问题与 ExcelJS 直接相关,可能是因为我对 Javascript 函数上下文缺乏根本的了解。

代码:

getData = function () {
var dataRows = [];

workbook.xlsx.readFile("myExcelWorkbook").then(function () {
var worksheet = workbook.getWorksheet("MyWorksheet");

worksheet.eachRow(function (row) {
var dataRow = {
colA: row.getCell("A").value,
colB: row.getCell("B").value,
colC: row.getCell("C").value
};

dataRows.push(dataRow);
});
});

return dataRows;
};

如果我逐步调试上述代码,我可以看到 dataRows 对象在何处填充了在eachRow 函数期间找到的正确数据。但是,一旦退出“readFile”函数,填充到 dataRows 对象中的所有项目就会消失。

无论我如何尝试填充 dataRows(例如调用外部函数来填充 dataRows 数组),在 workbook.xslx.readFile() 上下文中创建的任何对象似乎都会在之后被销毁。奇怪。

最佳答案

workbook.xlsx.readFile 是一个异步函数。您将在异步执行之前返回 dataRows。

参见How do I return the response from an asynchronous call?

以下是使用回调解决此问题的简单方法。将需要 dataRows 输出的函数传递给 getData,然后在构建 dataRows 后调用它。同样,使用链接问题中解释的 promise 有更好的解决方案。

getData = function (callback) {
var dataRows = [];

workbook.xlsx.readFile("myExcelWorkbook").then(function () {
var worksheet = workbook.getWorksheet("MyWorksheet");

worksheet.eachRow(function (row) {
var dataRow = {
colA: row.getCell("A").value,
colB: row.getCell("B").value,
colC: row.getCell("C").value
};

dataRows.push(dataRow);
});

callback(dataRows);
});

return dataRows;
};

关于Javascript 数组内容在离开函数上下文后消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33418054/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com