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

在我的例子中,我使用 、 和 、 和 。异步函数返回一些东西,并填充数组,但是它是数组的格式,以及处理我正在挣扎的数组的能力。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 call

length: 1

__proto__: Array(0)

当我尝试访问此数组时,使用 i 得到未定义。console.log(initialClasses[0]);


我在创建此数组时做错了什么?有没有一种更好,更清洁的方法可以做到这一点,我忽略了这一点?谢谢。


动漫人物
浏览 130回答 1
1回答

婷婷同学_

首先,我想我建议重新访问为什么我的变量在函数中修改后未被更改? - 随着您对异步行为的理解增长,异步代码引用。我相信这是问题的根源(因此,为什么这对社区的一些成员来说感觉像是重复的)。为什么你打电话时得到将取决于你什么时候打电话,如果你打电话得太早并且误解了工作原理,我们会再次期望未定义。undefinedconsole.log(initialClasses[0])async但是,与其进入这些杂草,不如让我们回到你问题的根源:有没有更清洁的方法?是的!这里的误解可能来自你构建它的方式。您可以大大简化它并获得相同的功能。您可以在异步函数内部调用以下内容const response = await axios.get('  let initialClasses = response.data;这将是首选方法,因为无论您要对来自该终结点的响应执行什么操作,基本上都是异步的。这样,响应数据也不会“嵌套”。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript