【问题标题】:Can't access objects within array - Javascript无法访问数组中的对象 - Javascript
【发布时间】:2020-08-14 03:58:05
【问题描述】:

所以我在 forloop 中运行了几个 $http.get 请求并将结果存储在一个数组中。当我运行时: console.log(episodesObj[0]) 它返回 undefined。但是,当我运行 console.log(episodesObj) 时,它会返回整个数组:

下面是我正在运行的代码

    var episodesObj = [];
    for(i=1;i<=num_seasons;i++) {
      $http.get('/api/show/<%=show.id%>/season/'+i)
      .then(response => {
        episodesObj.push(response.data)
      });
    }
    console.log(episodesObj); ```

【问题讨论】:

  • 您可以将数组粘贴为代码而不是屏幕截图吗?
  • 我最好的猜测是懒惰的控制台和“如何返回异步调用的结果”的欺骗,但是当你显示零代码时,它有点不可能回答
  • @mickl pastebin.com/1pN28j82 - 这是你要找的吗?
  • 向我们展示导致 console.log(包括)的代码
  • @Sturm 我已编辑问题以包含代码。

标签: javascript arrays json angularjs


【解决方案1】:

如果要打印最终结果,可以使用promise all

所有(承诺);

将多个 Promise 组合成一个 Promise,当所有输入 Promise 都已解决时,该 Promise 将被解决。

类似:

var listOfPromises = [];
for(i=1;i<=num_seasons;i++) {      
    listOfPromises.push($http.get('/api/show/<%=show.id%>/season/'+i))     
}


$q.all(listOfPromises).then(function(result){
   
    // we run this code once all promises are resolved
    for (var i = 0; i < result.length; i++){
        episodesObj.push(result[i]);
    }
   
   console.log(episodesObj);
});

【讨论】:

  • @downvoter,我的回答有什么问题?写评论
  • 但是,如上所述,这不是我的反对意见,所以我也不能撤回。无论谁投了反对票,可能都不再看了。
【解决方案2】:

在 http 调用完成之前,您不会将响应推送到您的数组,所以如果您立即登录 episodesObj[0],当然它是未定义的。

Chrome 会保留对您控制台记录的非原始内容的实时引用,因此当 http 调用最终更新数组时,它也会在控制台中更新,这就是您稍后能够查看它的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-13
    • 2017-09-04
    • 2019-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多