我有一项名为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); }
);
}
}
答案 0 :(得分:3)
如果你的getUserData
方法返回一个observable,你可以订阅它并在相关的回调中执行第二个方法:
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');
}
}