小白请教Angular中异步加载的问题,websocket

用的Angular2

            订阅了subject类型的消息 

            某一个组件的ts文件的部分代码如下:
            ........
            var list:Array<T>  //有一个list的变量

            ngOnint(){
                this.___service.getData()     //getData是从websockect来的
                      .subscribe(data=>{
                            console.log(data);
                            this.list = data;
                            接下来的代码是对list的操作....
                            })
            }

            问题是:因为异步加载的原因(?),对list操作时报错list的XXXis undefined。怎么样让对list的操作在list赋值完成后进行。如果在里面console(data[0])也是显示undefined

https://blog.csdn.net/u013480581/article/details/80830634

写法有点问题,this在subscribe方法里面指向的是websockect对象(this在ts和js中是关键字指向的是操作对象),用下面的写法写:
var list:Array //有一个list的变量

        ngOnint(){
                    const self=this;
            this.___service.getData()     //getData是从websockect来的
                  .subscribe(data=>{
                        console.log(data);
                        self.list = data;
                        接下来的代码是对list的操作....
                        })
        }

楼上说法半对,因为你不需要用self:

首先,你在定义list的时候你需要定义成类成员,也就是在component里直接写public list: Array《T》, 不写public也可以,但是不能写成var list. 然后你就可以在其他地方用this引用他,因为这个时候已经实例化了。
在subscribe里面也可以直接写this.list因为箭头函数已经帮你绑定了this的上下文。

所以你一开始没有把list定义成类成员那么后面你在引用this.list时就找不到他。

不清楚你的data格式是怎样的,但是如果你console.log(data)写在subscribe里面肯定是能拿到数据的然后对其操作,但你的data[0]可能没有数据。另外一点,
angular的httpclient在取到数据时已经帮你parse出数据了(默认做了response.json())