Angular 8 嵌套订阅

Dag*_*gle 5 observable rxjs angular

我正在执行 get 请求以检索用户角色

private myOrders;
constructor(private userData: UserDataService) {
  this.userData.getUser().subscribe((user: any) => {
    //and then I'm doing a conditional get 
    if (user.role == "Admin") {
      this.userData.getAdminOrders().subscribe((adminOrders: any) => {
        this.myOrders = adminOrders
      });
    } else {
      this.myOrders = user.orders
    }
  });
Run Code Online (Sandbox Code Playgroud)

我的应用程序仅正确显示 user.orders (普通客户的订单),但是当我使用管理员帐户时,它只显示第一页加载,但随后它们就消失了。

我如何管理这些嵌套订阅?(它们是我的 userDataService 上的 http.get)

Ger*_*ros 5

在这种类型的情况下,您应该使用rxjs运算符之一。

对于这种情况,我推荐您flatMap

private myOrders;
constructor(private userData: UserDataService) {
  this.userData.getUser().pipe(flatMap(user: any) => {
    if (user.role == "Admin") {
      return this.userData.getAdminOrders();
    } else {
      return of(user.orders)
    }
  }).suscribe((result) => {
        this.myOrders = result
    }
  );
Run Code Online (Sandbox Code Playgroud)

如果user.role == "Admin"为 true,result则将是 HTTP 请求的结果this.userData.getAdminOrders()。在另一种情况下,结果将是user.orders