Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 获取数组对象类型脚本中的第一个索引_Javascript_Arrays_Angular_Typescript_Ecmascript 6 - Fatal编程技术网

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

Javascript 获取数组对象类型脚本中的第一个索引,javascript,arrays,angular,typescript,ecmascript-6,Javascript,Arrays,Angular,Typescript,Ecmascript 6,我想从下面的代码片段中的数组对象数据列表中获取索引零记录。我不熟悉JavaScript和Typescript dataList: Array<any> = []; data: any; constructor(private apiService: ApiService) { this.apiService.getEncounterDashBoard(this.searchCond) .subscribe(data => { this

我想从下面的代码片段中的数组对象数据列表中获取索引零记录。我不熟悉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];
}
dataList:Array=[];
资料:有;
构造函数(私有apiService:apiService){
this.apiService.getEncounterDashBoard(this.searchCond)
.订阅(数据=>{
this.dataList=data.result;
});
让labels=this.dataList[0];
}
你可以这样试试

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 
     });
}

dataList:Array=[];
资料:有;
构造函数(私有apiService:apiService){
让标签=[];
this.apiService.getEncounterDashBoard(this.searchCond)
.订阅(数据=>{
this.dataList=data.result;
labels=this.dataList[0];
//在这里您可以看到,我们正在访问订阅块内的数据,bcs javascript是异步的
});
}

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

因此,您的
let labels
正在尝试在您实际得到响应之前获取
this.dataList[0]
。您可以做的一件事是创建一个组件范围的变量
labels
,然后在异步函数的回调中(在
subscribe
中)对其进行赋值,这样在异步函数解析后就会发生这种情况

另一个选项是创建一个函数,该函数处理异步解析后要发生的逻辑,并在
subscribe
中调用它

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

将该行放在
subscribe
函数中

.subscribe(data => {
   this.dataList = data.result;
   let labels = this.dataList[0];
 });
您还可以使用ES6解构:

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

放置行
let labels=this.dataList[0]
紧接着
this.dataList=data.result。原因是
dataList
在回调中异步更新,这意味着
这一点。调用dataList[0]
时,它可能不包含任何数据。
。subscribe
是一个异步函数。您必须在
内部设置
标签
。订阅
可能重复的标签您应该在订阅块外部声明标签,否则只能在内部使用。