即使将元素推入其中,数组元素也未定义[重复]

Posted

技术标签:

【中文标题】即使将元素推入其中,数组元素也未定义[重复]【英文标题】: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 都在一个不同的函数中。 【参考方案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] 你能提供完整的文件吗? 我已经更新了这个问题。谢谢。

以上是关于即使将元素推入其中,数组元素也未定义[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Alt 通量操作:即使调用 this.generateActions,_this.actions 也未定义

JavaScript映射为某些元素返回未定义[重复]

Javascript Nodejs值未推入数组[重复]

即使未显式修改数组值也已修改[重复]

如果使用 php (laravel) 未定义数组元素,则将 null 插入数据库

如何使用扩展运算符将对象数组推入特定元素