javascript - 带有被推入对象的数组结果仍然是空的
问题描述
我正在声明一个数组list_of_blogposts
,然后我正在打开一个文件以从中提取数据,并在其中声明一个blogpost_object
我正在输入键值对的对象。当我在打开的文件代码块内进行控制台记录时,它会正确地进行控制台记录,但在它之外,它显示为空,就像在最后一行中它不起作用一样。任何人都可以提及它的原因和解决方案吗?谢谢,代码如下
const list_of_blogposts = [];
new XLSX()
.extract("./all_blogposts.xlsx", {
ignore_header: 2,
include_empty_rows: false,
sheet_name: "all_blogposts"
})
.on("row", function(row) {
var blogpost_object = {};
blogpost_object["title"] = row[2];
list_of_blogposts.push(blogpost_object);
console.log(list_of_blogposts);
});
console.log(list_of_blogposts);
解决方案
这是因为它function(row) {...
是一个回调函数,因此它是异步执行的。所以执行流程就像
- 执行
.on()
- 在回调中调用函数
function(row) {...
- 执行
console.log
外部函数 - 最后,回调函数的执行
因此,在console.log
调用回调函数之前执行函数外部的函数,因此它返回一个空数组。函数内部console.log
在值被推送后返回数组。
因此,您可以做些什么来解决这个问题,就是对回调函数中的值数组做任何您想做的事情。
const doAction = (list) => {
//Do whatever you want
}
const list_of_blogposts = [];
new XLSX()
.extract("./all_blogposts.xlsx", {
ignore_header: 2,
include_empty_rows: false,
sheet_name: "all_blogposts"
})
.on("row", function(row) {
var blogpost_object = {};
blogpost_object["title"] = row[2];
list_of_blogposts.push(blogpost_object);
console.log(list_of_blogposts);
doAction(list_of_blogposts)
});
console.log(list_of_blogposts);
希望有帮助!!!
推荐阅读
- webview - 电子:分享
使用带有 WebRTC 的 desktopCapture 将内容标记为视频流 - c++ - 动态增长二维数组的行和列
- swift - Swift 泛型树转换为 int
- reactjs - 带有 nextjs 的摩纳哥编辑器
- function - 在 woocommerce 的自定义文本区域中保留用户换行符
- php - 在 Codeigniter 中优化表
- python - 从字典列表中查找最小键值,忽略无值
- powershell - 使用 powershell 在 Windows 10 中将虚拟目录添加到 IIS 站点
- vue.js - v-select vuetify 最大元素数
- python - 使用 h5py 模块将 Python 列表写入 HDF5 文件