Получить первый индекс в скриптах типов объектов Array - PullRequest
1 голос
/ 04 июня 2019

Я хочу получить нулевую запись индекса из объекта Array 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 ]

1 голос
/ 04 июня 2019

вы можете попробовать вот так

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

0 голосов
/ 04 июня 2019

Поместите линию внутри функции subscribe.

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

Вы также можете использовать ES6 деструктурирование:

.subscribe(data => {
   this.dataList = data.result;
   let [labels] = this.dataList;
 });
0 голосов
/ 04 июня 2019

Думайте об асинхронных операциях как о тех, которые происходят после остальных.Ваш getEncounterDashBoard вызывается и запускает запрос, но все в вашем коде продолжается, с ответом или без него (обычно без, поскольку все слишком быстро).

Следовательно, ваш let labels пытается получить this.dataList[0] прежде чем у вас есть ответ.Одна вещь, которую вы можете сделать, это создать переменную в области компонента labels, а затем присвоить ее внутри обратного вызова асинхронной функции (внутри subscribe), таким образом это происходит после разрешения асинхронной функции.

Другой вариант, это создать функцию, которая обрабатывает логику, которую вы хотите выполнить после разрешения асинхронности, и вызывать ее внутри subscribe.

afterDataList() {
  let labels = this.dataList[0]
  // do something with it
  // ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...