如何在 ionic2 中进行顺序 api 调用



我对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);
  }
}

相关内容

  • 没有找到相关文章

最新更新