即使在向其中推入元素后,数组元素仍未定义

问题描述:

我正在构建视频保存服务作为项目,并从数据库response.array[]获得用户保存的视频数组,然后将videoId推入显示阵列video[],但在显示各自videoId使用console.log()它不断未定义。即使在向其中推入元素后,数组元素仍未定义

我有如下的代码片段。

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

完整的代码片段就像这样

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 
    } 
+0

,因为这似乎是异步'的console.log(视频[0])'是异步调用结束前 –

+0

可能是因为'response'方法后'console.log'声明已是异步调用执行执行。 – gurvinder372

+0

感谢您的评论,我如何解决它? 因为我需要将'video [0]'返回到另一个变量,因为这整个片段出现在不同的函数中。 – Nithin

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

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

感谢您的回答,但我需要将'video [0]'返回到另一个变量,因为这整个代码片段都在不同的函数中。 类似于此'nextVideo = Video();' 和'Video()'是代码片段。 它可能并不总是'video [0]',并且可以是任何值,比如说'video [k]' – Nithin

+0

你能提供完整的文件吗? –

+0

我已经更新了这个问题。谢谢。 – Nithin