首页 > 解决方案 > 在 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)方法之外,后两行在方法内(我也不知道为什么它们没有按顺序显示)。谁能帮我解决我的问题?

Console.log Console.log 数组展开

标签: javascriptjqueryarrays

解决方案


在javascript中,所有方法的常规方法都在任何异步代码之前被调用,所以发生的事情是代码外部的控制台日志在方法运行之前发生,运行任何取决于方法内部ajax调用中的信息的代码,或者你可以使用 setTimeout() 包装您需要运行的任何函数。

观看有关事件循环的演讲;它帮助我理解了这里发生了什么,当我刚开始的时候这真的让我很困惑,但是理解事件循环很有帮助。


推荐阅读