角度2同步负载

时间:2017-03-21 08:11:54

标签: angular typescript httprequest

我的语言环境或会话存储中有一个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(); }
);

1 个答案:

答案 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