为什么我不能在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');
}
}
}
答案 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 [],请在获得响应后使用它,而不是在外部。