【发布时间】:2021-12-11 16:54:36
【问题描述】:
我不能将过滤器操作符移动到带有条件的地图之外
return this.http.get('profili/usermenu')
.pipe(
map((menu: Menu[]) => {
if (this.appConfig.config.DisableRitiriDetails)
menu = menu.filter(item => !item.Description.includes('xxx'));
const menuCreated: SidenavItem[] = this.menuSrv.populateMenu(menu);
this.router.navigate([menuCreated[0].routeOrFunction]);
return new MenuSuccess(menuCreated);
}),
catchError(() => of(new LoginError(3)))
);
类似
return this.http.get('profili/usermenu')
.pipe(
filter((menu: Menu) => this.appConfig.config.DisableRitiriDetails || !menu.Description.includes('xxx')),
map((menu: Menu[]) => {
const menuCreated: SidenavItem[] = this.menuSrv.populateMenu(menu);
this.router.navigate([menuCreated[0].routeOrFunction]);
return new MenuSuccess(menuCreated);
}),
catchError(() => of(new LoginError(3)))
);
这样它给我的地图错误((菜单:菜单[])
【问题讨论】:
-
这是因为在
filter中您说参数是Menu,而在地图中您期望的是Menu[](菜单数组)。 -
您混淆了数组方法
.filter()和 rxjs 可观察管道运算符filter()。理论上,一个 observable 可以发出多次,这就是 rxjs 操作符存在的原因。这并不适用于你,因为你只是在做一个 http get 调用,它只发出一个响应(一个数组)并完成,但是例如在听按钮点击的情况下,你可能想要过滤每个事件是右击还是左击。因此,在您的情况下过滤 observable 没有意义。
标签: angular rxjs rxjs-pipeable-operators