【问题标题】:Cannot Access to Data from my API (Asynchronous problems) [duplicate]无法从我的 API 访问数据(异步问题)[重复]
【发布时间】:2020-03-27 08:22:24
【问题描述】:

我有一个问题,我试图从我的 API 获取我的房间数据以使用地图功能,但我无法获取数据。 这是我的代码。

    Axios.get(`/user/rooms?${token}`).then(res => {
        tmp.push(res.data)
    })
    const data = tmp
    const Rooms = [data]
    const RoomNames = []

这是制作console.log(data)后的输出:

0: (4) [{…}, {…}, {…}, {…}]length: 1
__proto__: Array(0)

而data[0]是未定义的​

【问题讨论】:

  • 欢迎来到 Stack Overflow!看看writing the perfect question。你调查了什么?
  • 请提供导致问题的代码。在你做console.log(data)(它有效)和你做data[0](它没有)之间一定有一些小问题。还要检查数据中是否包含undefined,但输出不应将其缩写为{...}....

标签: javascript arrays json axios


【解决方案1】:

Javascript 基于异步,因此唯一的方法是在回调中调用所有逻辑(因为 .then 需要更多时间,而 javascript 不会等待它)

Axios.get(`/user/rooms?${token}`).then(res => {
    tmp.push(res.data)
    // this comes later so you can only get res.data in here
    const data = tmp
    const Rooms = [data]
    const RoomNames = []
})
// everything under here will be executed before .then

【讨论】:

    【解决方案2】:

    Axios.get 是一个承诺,它将被添加到事件循环中执行。 .then 将在您的请求中的数据准备好后作为回调,它将被执行。

    在您的代码中,您在将来自请求的数据添加到 tmp 数组之前访问 tmpdata

    let tmp = [];
    
    Axios.get(`/user/rooms?${token}`).then(res => {
    
        tmp.push(res.data);
        const data = tmp
        const Rooms = [data]
        const RoomNames = []
    
    })
    

    For more about promises.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-18
      • 1970-01-01
      • 2014-03-13
      • 1970-01-01
      • 2019-07-25
      相关资源
      最近更新 更多