我的语言环境或会话存储中有一个JWT令牌,它包含userId。
因此,如果用户刷新
之类的路线test.com/route2
app.components.ts 使用http请求获取角色
constructor(
private userService: UserService
)
{
this.userService.getUser(this.subId()).toPromise().then((data)=>{ this.setLoggedUser(data);
});
}
现在问题出在我的Route2的ngInit事件上,即 route2.component.ts。 我正在做一个获取客户的http请求,但问题是它在设置LoggedUser之前被触发并且它抛出了null错误。
this.groupService.getAllCustomersOfGroup(this.getLoggedUser().Group.Id).subscribe(
data => this.customers = data,
err => this.error(err),
() => { this.loadingHideSucces(); }
);
答案 0 :(得分:1)
您必须将调用链接起来才能按正确的顺序获取数据,例如,您可以实施getLoggedUser()
方法以返回Observable
:
ngOninit() {
this.getLoggedInUser().switchMap(user=>{
this.groupService.getAllCustomersOfGroup(user.Group.Id).subscribe(
data => this.customers = data,
err => this.error(err),
() => {
this.loadingHideSucces();
}
);
})
}
getLoggedInUser():Observable<LoggedInUser>{
// logic to fetch user data, returns an observable.
}
由于您的组件名为“route2”,我猜它会在ng-router-outlet
标记中使用,然后您还可以使用Resolve guard。