我对ionic2和javascript编码完全陌生。我的问题是这样的。
我有一个 js 文件,我在其中的构造函数中进行了 web api 调用并将响应保存在变量 var1 中。我有另一种方法,它使用 var1 对另一个端点进行第二次 api 调用。第二种方法是导出的函数,是从另一个文件调用的。现在,一旦调用第二个方法,就会加载构造函数,该构造函数进行第一个 api 调用,并且在将响应存储在 var1 中之前,从导出的方法进行第二个 api 调用,使用 var1 作为空白。 我怎样才能避免这种情况。我想等到通过构造函数更新 var1。
这是我的构造函数代码:
constructor(public http: Http, platform: Platform) {
//console.log(this.http.get("http://freegeoip.net/json/"));
this.http.get("http://freegeoip.net/json/").map(res => res.json()).subscribe(data => {
if(data.country_code=="US")
this.country_code = 1;
else if(data.country_code=="IN")
this.country_code = 2;
});
}
这是正在调用的导出方法:
load(): Observable<Post[]> {
...
let opt: RequestOptions;
opt = new RequestOptions({
headers: headers
});
return this.http.get(`${this.backand_api_url}`+this.country_code+'/posts', opt )
.map(res => <Post[]>res.json().data);
}
}
load 方法使用this.country_code变量 .. 该变量仍未从构造函数调用更新。
编辑 load(( 方法返回一个可观察量。
在构造函数中使用 publishLast((.refCont((,在 load 中使用 withLatestFrom。像这样:
@Component({
selector: 'haha',
template: 'number is {{y}}'
})
export class HahaComponent {
init$: Observable<number>;
y: number;
constructor() {
this.init$ = Observable.of(1)
.delay(10000)
.do(x => {
console.log('init', x);
this.y = x;
})
.publishLast()
.refCount();
}
load() {
console.log('load');
this.init$
.withLatestFrom(Observable.of(2), (a, b) => b)
.do(x => console.log(x))
.subscribe(x => this.y = this.y + x);
}
}