javascript - 在 JavaScript 中使用 array.push() 后数组长度不正确
问题描述
JavaScript 中的菜鸟,如果我遗漏了一些基本的东西,请原谅我。
我有一个数组,我想使用 JQuery 推送从 AJAX 请求中检索到的数据,其中 CalendarEvent 是我创建的自定义类。
let events=[];
$.post(url, data, function(data) {
data.forEach(x => function(x) {
let event = new CalendarEvent();
events.push(event);
});
}, "json");
我的问题是当我尝试console.log(events)
进入该function(data)
方法时,它显示为正确数量的对象。当我console.log(events)
在方法之外(没有添加或减去其他内容)时,长度为 0,并且我的所有对象都在一个空数组中。截图中的前两行在console.log(events)
方法之外,后两行在方法内(我也不知道为什么它们没有按顺序显示)。谁能帮我解决我的问题?
解决方案
在javascript中,所有方法的常规方法都在任何异步代码之前被调用,所以发生的事情是代码外部的控制台日志在方法运行之前发生,运行任何取决于方法内部ajax调用中的信息的代码,或者你可以使用 setTimeout() 包装您需要运行的任何函数。
观看有关事件循环的演讲;它帮助我理解了这里发生了什么,当我刚开始的时候这真的让我很困惑,但是理解事件循环很有帮助。
推荐阅读
- regex - 如何修改当前匹配 3 个数字的 2 个正则表达式以匹配 4 位数字末尾的相同 3 个数字
- r - 获取计数数据的 R ggplot 箱线图
- vb.net - 在 Visual Basic 中调用子例程后禁用进一步的列表框输入
- json - 查找特定键的所有出现的路径是指定值
- python - 将参数传递给 PyGAD 适应度函数
- haskell - 如何让 GHCi 向我显示模棱两可的类型签名?
- javascript - 如何使 get each get、post、put 和 delete 出现在每个段落标签中?
- javascript - WebAssembly.instantiateStreaming 忽略 importObject 的 js.mem
- nlp - 微调 Huggingface 的输入/输出格式 RobertaForQuestionAnswering
- python - 如何对远程计算机上的 Errno 13 Permission Denied 进行故障排除?