Javascript 数组内容在离开函数上下文后消失
Javascript array contents disappear after leaving function context
我正在使用 Node npm 库 "ExcelJS" 读取 Excel 工作簿的工作sheet 并使用表示 [=27] 中找到的数据的对象填充数组=]的行。
我认为这个问题与 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 后调用它。同样,使用链接问题中解释的承诺有更好的解决方案。
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;
};
我正在使用 Node npm 库 "ExcelJS" 读取 Excel 工作簿的工作sheet 并使用表示 [=27] 中找到的数据的对象填充数组=]的行。
我认为这个问题与 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 后调用它。同样,使用链接问题中解释的承诺有更好的解决方案。
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;
};