RxJ的特殊过滤

时间:2018-11-07 08:39:34

标签: typescript rxjs

我有一段打字稿代码,它正在调用Web服务,然后有选择地(基于类型)将接收到的菜单项追加到根菜单项的数组中:

private loadMenuItems() {
  this.menuService.getAll().subscribe(menuItems => {

    this.rootMenus.forEach(rootMenu => {
      rootMenu.menus = menuItems
          .filter(menuItem => menuItem.type === rootMenu.rootMenu.type)
          .sort((a, b) => a.showOrder - b.showOrder);

          this.menuItems.concat(rootMenu.menus);
      }, this.errorCallback);

  });
}

我不希望以这种方法订阅可观察对象,而是返回具有已成形数据的可观察对象。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

只需将其通过管道传递到map(对于errorCallback,应通过catchError)。假设您放错了errorCallback,这就是您要这样做的方式:

private loadMenuItems() {
  return this.menuService.getAll().pipe(map(menuItems => {

    this.rootMenus.forEach(rootMenu => {
      rootMenu.menus = menuItems
          .filter(menuItem => menuItem.type === rootMenu.rootMenu.type)
          .sort((a, b) => a.showOrder - b.showOrder);

          this.menuItems.concat(rootMenu.menus);
      });

  }), catchError(this.errorCallback));
}