从angularcli中的HTTP Get请求检索的数组范围

时间:2019-06-04 07:02:57

标签: angular http-get

为什么我不能在get请求之外打印数组address1? 我对此感到困惑。有人可以帮我解决这个问题吗?

我也尝试过使用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 个答案:

答案 0 :(得分:1)

this.httpClient.get是可观察的类型,因此被异步调用。 console.log(address1[i]);在它外面,因此该行首先被执行。因此,您没有得到结果

答案 1 :(得分:0)

您可以在请求的订​​阅之外访问address1[]-它在ngOnInit中声明,并且位于其关闭范围之内-但很明显,您只有在请求有机会得到解决之后,您才能使用任何内容。在请求完成之前,将执行“此处不打印”循环。

答案 2 :(得分:0)

您好。由于您的代码在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文件中使用它,请使用地址

答案 3 :(得分:0)

这是由于http.get的异步行为引起的,因此,如果要使用address1 [],请在获得响应后使用它,而不是在外部。

相关问题