RxJs:具有内部 observable 的过滤器数组 [英] RxJs: Filter array with inner observable

查看:45
本文介绍了RxJs:具有内部 observable 的过滤器数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一组路由,我试图根据服务是否表示用户具有权限来过滤这些路由.我尝试了各种组合 &没有成功的转换运算符 mergeMap、concatMap、concatAll、mergeAll.问题是 hasRoutePermission 返回一个 observable,它从端点返回一个布尔值.提前致谢.

I have an array of routes, which I'm trying to filter on depending if the service says the user has permission. I've tried various combination & transformative operators with no success mergeMap, concatMap, concatAll, mergeAll. The problem is that hasRoutePermission returns an observable that returns a boolean from the endpoint. Thanks in advance.

stackblitz

const exampleRoutes = [{
  model: 'ExampleModel'
}, {
  model: 'ExampleModel'
}, {
  model: 'ExampleModel'
}, {
  model: 'ExampleModel'
}];

filterRoutes(routes): Observable <[]> {
  const hasRoutePermission = (route: IRouteData): Observable <boolean> =>
    this.examplePermissionService.hasRoutePermission(route);

  return of(items)
  .pipe(
    filter(item => hasRoutePermission(item))// Problem is here
  )
}

我正在使用异步管道订阅模板中的过滤列表.

I'm using an async pipe to subscribe to the filtered list in the template.

推荐答案

因此您在 Observable 中接收布尔值,现在需要使用扁平化"之一操作符(如 mergeMapconcatMap 等)来获取原始值:

So you receive boolean value inside Observable and now need to use one of "flattening" operators (like mergeMap, concatMap, etc) to get back primitive value:

const { of, from } = rxjs; // = require("rxjs")
const { mergeMap, filter, map, toArray } = rxjs.operators; // = require("rxjs/operators")

function hasRoutePermission(id) {
  return of(id % 2 === 0); // mock api logic
}

function filterRoutes(items) {
  return from(items).pipe(
    mergeMap(item =>
      hasRoutePermission(item).pipe(
        filter(permission => permission),
        map(() => item)
      )
    ),
    toArray()
  );
}

const filtered$ = filterRoutes([0,1,2,3,4,5]);
filtered$.subscribe(v => console.log(v));

<script src="https://unpkg.com/rxjs@6.6.2/bundles/rxjs.umd.min.js"></script>

这篇关于RxJs:具有内部 observable 的过滤器数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆