来自另一个组件的http.get之后的Angular 2执行方法已经完成

时间:2016-05-13 11:39:12

标签: angular

我有一项名为JwtService的服务。此服务有一种获取用户数据的方法。我在我的组件中调用此方法:

this.JwtService.getUserData();

现在,每当我点击组件中的按钮时 - 我都会调用此方法。 调用此方法后,我调用另一个本地方法:

this.updateMoves();

适用于JwtService服务中的数据。

问题是this.JwtService.getUserData();没有完成执行并更新新数据,并且this.updateMoves();已对旧数据执行。

不需要的解决方案:将updateMoves()方法移至服务并在收到响应后调用它可以使其正常工作,但由于此方法属于特定的一个组件,我不知道我想那样做。

不需要的解决方案2:新服务变量IS_LOADED并检查我的组件是否已完成加载。它会导致我的应用程序出现一些问题。

在收到服务数据后可能有效运行updateMoves()的任何其他解决方案?

我的getUserData()方法:

getUserData()
    {
        this.good = false;
    if (this.getToken()) {
    this.http.get('user/info?token='+this.getToken())
      .map((res:Response) => res.json())
      .subscribe(
        data => {
            this.userData = data.user;
            this.LOADED = true; 
        },
        err => { this.checkToken(err); }
      );
    }
}

1 个答案:

答案 0 :(得分:3)

如果你的getUserData方法返回一个observable,你可以订阅它并在相关的回调中执行第二个方法:

this.JwtService.getUserData().subscribe(() => {
  this.updateMoves();
});

修改

您可以使用docatch运算符:

getUserData() {
  this.good = false;
  if (this.getToken()) {
    return this.http.get('user/info?token='+this.getToken())
      .map((res:Response) => res.json())
      .do(
        data => {
          this.userData = data.user;
          this.LOADED = true; 
      })
      .catch(
        err => { this.checkToken(err); }
    );
  } else {
    return Observable.throw('Not good');
  }
}