【问题标题】:Array element is undefined even after pushing elements into it [duplicate]即使将元素推入其中,数组元素也未定义[重复]
【发布时间】:2018-04-01 12:40:54
【问题描述】:

我正在构建一个视频保存服务作为一个项目,并从数据库response.array[] 获得用户保存的视频数组,然后我将videoId 推送到显示数组video[] 中,但显示相应的@ 987654324@ 使用 console.log() 它一直未定义。

我有如下代码 sn-p。

let video = [];
this.service.nextVideo().subscribe( response =>
{
    response.array.forEach(element => {
    video.push(element.videoId);
  });
})
console.log(video[0]); //Output is undefined

完整的代码sn-p是这样的

nxtVideo(){
    let video = [];
    this.service.nextVideo().subscribe( response => 
    {
        response.array.forEach(element => {
          console.log(element.videoId);//Display's video id
          video.push(element.videoId);
        });
    })
    console.log(video[0]); //Output undefined
    console.log(video); //Output shows all elements but on accessing specific elements it shows undefined
    return (video[this.offset++]); //offset is a global variable to measure watched videos
  }

  Launch(){
    let videoId = this.nxtVideo();
    //The Display table starts here
  }

【问题讨论】:

  • 因为这似乎是异步 console.log(video[0]) 在异步调用结束之前执行
  • 可能是因为response方法在console.log语句已经执行后被异步调用了。
  • 感谢您的评论,我该如何解决?因为我需要将video[0] 返回到另一个变量,因为整个 sn-p 都在一个不同的函数中。

标签: javascript angularjs arrays node.js


【解决方案1】:

试试这个代码。它必须是工作,因为它的异步功能。

let video = [];
this.service.nextVideo().subscribe( response =>
{
    response.array.forEach(element => {
       video.push(element.videoId);
    });
    console.log(video[0]); //Output is undefined
})

【讨论】:

  • 感谢您的回答,但我需要将 video[0] 返回到另一个变量,因为整个 sn-p 都在不同的函数中。与 nextVideo = Video();Video() 类似的是代码 sn-p。它可能并不总是video[0],可能是任何值,比如video[k]
  • 你能提供完整的文件吗?
  • 我已经更新了这个问题。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-19
  • 2019-06-01
  • 2013-06-05
  • 2021-11-14
  • 2013-10-24
相关资源
最近更新 更多