从另一个组件http.get后执行角2的方法已完成
问题描述:
我有一个名为JwtService
的服务。该服务具有获取用户数据的方法。我在我的组件中调用此方法:从另一个组件http.get后执行角2的方法已完成
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); }
);
}
}
答
如果您getUserData
方法返回一个可观察的,你可以订阅它,并在相关联的回调执行第二种方法:
this.JwtService.getUserData().subscribe(() => {
this.updateMoves();
});
编辑
您可以使用do
和catch
运算符:
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');
}
}
你应该添加组件类和装饰到后的代码,硬顶猜发生了什么有 – shershen
你可以从你的'getUserData()'方法返回一个可观的,所以你可以后执行一切成功了。 – rinukkusu