我具有此功能,可以从URL获取JSON文件。 现在,我只需要该文件中似乎是this.data的随机对象。 但是当尝试在.subscribe函数之外进行console.log(this.data)时,我无法定义。我需要在其余函数中使用该值并将其返回给另一个函数吗?
这是我的代码:
import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Observable';
/*
Generated class for the AdsProvider provider.
See https://angular.io/guide/dependency-injection for more info on providers
and Angular DI.
*/
@Injectable()
export class AdsProvider {
adsUrl: string;
constructor(public http: HttpClient) {
console.log('Hello AdsProvider Provider');
}
getAds() {
this.adsUrl = 'an url';
console.log(this.adsUrl);
console.log('I can get ads');
// Nu vraag je de file van de server
let data: Observable<any> = this.http.get(this.adsUrl);
data.subscribe(result => {
this.data = result;
// Nu heb je de JSON file met de advertenties
});
console.log(this.data); // this gives me undefined
}
}
答案 0 :(得分:0)
订阅异步工作。因此,在订阅返回值很久之前,console.log()会被处理,这是很正常的。
DataFrame
您必须调用该过程的方法
data.subscribe(result => {
this.data = result;
console.log('this.data: ', this.data);
// call methods that work with this.data from here
});
,来自订阅内部。这是Angular中的常用方法。您等待订阅中的值,并在提供后立即使用它。