获取数组对象类型脚本中的第一个索引

时间:2019-06-04 09:16:56

标签: javascript arrays angular typescript ecmascript-6

我想从下面的代码片段中的数组对象 dataList 中获取索引零记录。我是JavaScript和Typescript的新手。

dataList: Array<any> = [];
 data: any;

 constructor(private apiService: ApiService) {  


   this.apiService.getEncounterDashBoard(this.searchCond)
     .subscribe(data => {
       this.dataList = data.result;
     });

    let labels = this.dataList[0];
}

3 个答案:

答案 0 :(得分:1)

您可以尝试

dataList: Array<any> = [];
 data: any;

 constructor(private apiService: ApiService) {  

 let labels = [];
   this.apiService.getEncounterDashBoard(this.searchCond)
     .subscribe(data => {
       this.dataList = data.result;
       labels = this.dataList[0]; 
// here you can see that we are access the data inside the subscription block bcs javascript is asynchronous. So it is not wait complete the api call 
     });
}

答案 1 :(得分:0)

将异步操作视为其余操作之后发生的操作。 您的getEncounterDashBoard会被调用并启动请求,但是代码中的所有内容都会继续运行,无论有无响应(通常没有响应,因为一切都太快了)。

因此,您的let labels试图在实际得到答复之前获得this.dataList[0]。您可以做的一件事是创建一个组件范围的变量labels,然后在异步函数的回调中(在subscribe内部)对其进行赋值,这种方式会在异步函数解析后发生

另一个选择是创建一个函数,该函数处理要在异步解决后发生的逻辑,然后在subscribe内部调用它。

afterDataList() {
  let labels = this.dataList[0]
  // do something with it
  // ...
}

答案 2 :(得分:0)

将行放在subscribe函数内部。

.subscribe(data => {
   this.dataList = data.result;
   let labels = this.dataList[0];
 });

您还可以使用ES6解构:

.subscribe(data => {
   this.dataList = data.result;
   let [labels] = this.dataList;
 });