将Observable <boolean []>拆分为Observable <boolean> []?

时间:2018-03-22 12:18:01

标签: angular rxjs

在我关注的组件中:

// this.can... are booleans
redux
  .watch(state => state.userInfo.access.current)
  .takeUntil(this.done)
  .subscribe(access =>
    [this.canPartners, this.canServices, this.canTens, this.canWorklist] =
    [EPermission.Partner, EPermission.Worklist, EPermission.Tens, EPermission.Worklist]
      .map(ii => access[ii] >= EAccess.Read));

我想知道如何将Observable分割成类似的东西:

// this.can...$ are Observable<boolean>s
[this.canPartners$, this.canServices$, this.canTens$, this.canWorklist$] = redux
  .watch(ReduxGetters.userAccess)
  .takeUntil(this.done)
  .?mapSplit?(access => [EPermission.Partner, EPermission.Worklist, EPermission.Tens, EPermission.Worklist].map(ii => access[ii] >= EAccess.Read));

更新

我在使用rxjs BTW,这意味着我受到那里提供的运营商的限制。我到达那里的最近的是:

const result$: Observable<Observable<boolean>[]> = redux
  .watch(ReduxGetters.userAccess)
  .takeUntil(this.done)
  .map(access =>
    [EPermission.Partner, EPermission.Worklist, EPermission.Tens, EPermission.Worklist]
      .map(ii => Observable.of(access[ii] >= EAccess.Read)));

...现在我只是需要摆脱包装器Observable ......

1 个答案:

答案 0 :(得分:0)

你可能想尝试这样的事情

// this.can...$ are Observable<boolean>s
redux
  .watch(ReduxGetters.userAccess)
  .takeUntil(this.done)
  .reduce((accumulatorArray, current) => {
    accumulatorArray.push(current  >= EAccess.Read)
  }, new Array<boolean>())
  .submit(
    arrayOfBooleans => [this.canPartners$, this.canServices$, this.canTens$, this.canWorklist$] = arrayOfBooleans
  )

我无法尝试这个,但也许它有效