我想从下面的代码片段中的数组对象 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];
}
答案 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;
});