为了账号安全,请及时绑定邮箱和手机立即绑定

Javascript Array.push 创建一个我无法使用索引访问的嵌套数组

Javascript Array.push 创建一个我无法使用索引访问的嵌套数组

动漫人物 2022-08-04 16:15:47
在我的例子中,我使用 、 和 、 和 。异步函数返回一些东西,并填充数组,但是它是数组的格式,以及处理我正在挣扎的数组的能力。asyncawait.then我使用以下代码用我的MongoDB数据库中的对象填充数组。const initialClasses = [];const getInitData = async () => {  await axios.get('http://localhost:5000/classes/api/')    .then(response => {      initialClasses.push(response.data)    })    .catch(error => {      console.log(error)    });  }  getInitData();  console.log(initialClasses);但是,当我控制台.log initialClasses 时,我得到以下数组:[]0: (3) [{…}, {…}, {…}] // objects provided from the async calllength: 1__proto__: Array(0)当我尝试访问此数组时,使用 i 得到未定义。console.log(initialClasses[0]);我在创建此数组时做错了什么?有没有一种更好,更清洁的方法可以做到这一点,我忽略了这一点?谢谢。
查看完整描述

1 回答

?
婷婷同学_

TA贡献1844条经验 获得超8个赞

首先,我想我建议重新访问为什么我的变量在函数中修改后未被更改? - 随着您对异步行为的理解增长,异步代码引用。我相信这是问题的根源(因此,为什么这对社区的一些成员来说感觉像是重复的)。

为什么你打电话时得到将取决于你什么时候打电话,如果你打电话得太早并且误解了工作原理,我们会再次期望未定义。undefinedconsole.log(initialClasses[0])async

但是,与其进入这些杂草,不如让我们回到你问题的根源:有没有更清洁的方法?是的!这里的误解可能来自你构建它的方式。您可以大大简化它并获得相同的功能。

您可以在异步函数内部调用以下内容

const response = await axios.get(' 
let initialClasses = response.data;

这将是首选方法,因为无论您要对来自该终结点的响应执行什么操作,基本上都是异步的。这样,响应数据也不会“嵌套”。


查看完整回答
反对 回复 2022-08-04
  • 1 回答
  • 0 关注
  • 129 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信