离开函数上下文后,Javascript数组内容将消失
Javascript array contents disappear after leaving function context
我正在使用节点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(例如,调用外部函数来填充dataRow数组),在工作簿.xslx.readFile()的上下文中创建的任何对象都会在之后被销毁。奇怪的
工作簿.xlsx.readFile是一个异步函数。您将在异步执行之前返回dataRows。
请参阅如何从异步调用返回响应?
以下是使用回调修复此问题的简单方法。将期望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;
};
相关文章:
- 如何在映射数组中添加换行符
- javascript结合了数组和字典
- 需要帮助设置json数组
- 不能从angular2中的子组件指定父组件中的数组
- 使用JS将数组转换为json对象
- 数组在递归方法中设置为null
- knockoutjs可观察数组
- Javascript-如何读取json文件中的列并将其保存在Javascript数组中
- 将数组从PHP传递到Javascript
- JavaScript数组排序(函数)用于对表行进行排序,而不是排序
- 在函数中添加数组元素的数值
- 无法通过数组映射绑定
- javascript中的数组出错
- 如何使用 node.js 比较两个 json 数组
- 空的数组绑定元素在页面加载时消失
- JSON 空数组条目消失
- 离开函数上下文后,Javascript数组内容将消失
- 数组在JSON请求之外消失
- Js数组到json,但一些值消失
- JavaScript项从数组中消失