我有一个从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
}
}
发布于 2018-07-14 03:06:21
订阅以异步方式工作。因此,您的console.log()打印是很正常的,因为console.log()在订阅返回值之前很久就被处理了。
data.subscribe(result => {
this.data = result;
console.log('this.data: ', this.data);
// call methods that work with this.data from here
});
你必须调用方法,这个过程
this.data
,从订阅内部。这是Angular中的常见方式。您等待订阅中的值,并在提供该值后立即使用它。
https://stackoverflow.com/questions/51331342
复制相似问题