我对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()方法返回一个observable。
答案 0 :(得分:0)
在构造函数中使用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);
}
}