область действия массива, полученная из HTTP-запроса Get в angularcli - PullRequest
0 голосов
/ 04 июня 2019

Почему я не могу напечатать массив address1 вне запроса get? Я застрял с этим. Кто-нибудь может мне помочь с этим?

Я также пытался использовать XMLHttpRequest (), даже если он показывает ту же проблему.

  import { HttpClient } from '@angular/common/http';

  export class MapComponent implements OnInit {

  private elements = [];
  searchURL = "http://.......";
  constructor(private httpClient: HttpClient) { }

  ngOnInit() : void {
  var address1 = [];
  var i;
  this.httpClient.get(this.searchURL).subscribe((res : any[]) =>{
  this.elements = res;
  for(i=0;i<this.elements.data.length;i++){
  address1.push(this.elements.data[i].location);
  //console.log(address1[i]);//prints here 
  }
 });

 //Not printing here 
   for(i=0;i<address1.length;i++){
   console.log(address1[i]);
   console.log('in');
   }

 }

}

Ответы [ 4 ]

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

this.httpClient.get относится к наблюдаемому типу, поэтому он вызывается асинхронно.console.log(address1[i]); находится вне его, поэтому эта строка выполняется первой.Поэтому вы не получаете результат

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

Это связано с асинхронным поведением http.get, поэтому, если вы хотите использовать address1 [], используйте его после того, как получите ответ не снаружи.

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

Здравствуйте. Поскольку ваш код выполняется до ответа Http, выполните следующие действия для печати данных

import { HttpClient } from '@angular/common/http';

export class MapComponent implements OnInit {

    private elements = [];
    searchURL = "http://.......";
    constructor(private httpClient: HttpClient) { }
    public address:any = []
    ngOnInit() : void {
        var address1 = [];

        this.httpClient.get(this.searchURL).subscribe((res : any[]) =>{
            this.elements = res;
            for(let i=0;i<this.elements.data.length;i++){
                address1.push(this.elements.data[i].location);
                (this.address).push(this.elements.data[i].location);
                //console.log(address1[i]);//prints here 
            }

            for(let j=0;j<address1.length;j++){
               console.log(address1[j]);
               console.log('in');
           }
            console.log("this.address::",this.address);
        });

     }

}

если вы хотите использовать его в html-файле, тогда используйте адрес ключ

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

Вы можете получить доступ к address1[] вне подписки на запрос - она ​​объявлена ​​в ngOnInit и действует в момент ее закрытия - но, очевидно, у вас не будет контента до тех пор, пока запрос не сможет быть разрешен. Ваш цикл «Не печатать здесь» выполняется до завершения запроса.

...