rxjs如何使用withLatestFrom访问先前的参数

时间:2018-08-10 12:26:40

标签: angular rxjs ngrx

使用RxJs 6

这是RxJs管道的摘录:

.pipe(
  tap((action) => console.log(action)),
  // error is on following line
  withLatestFrom(this.store.pipe(select(selectBim(action.payload)))),
  ...
)

IDE中的错误为Cannot find name 'action',运行时错误为action is not defined

但是在withLatestFrom中,我需要访问action。我怎样才能做到这一点?谢谢

2 个答案:

答案 0 :(得分:3)

我认为您可以只使用flatMapmergeMap的别名)运算符:

.pipe(
  flatMap((action) => this.store.pipe(select(selectSim(action.payload)))),
  tap((action) => console.log(action)),
  ...
)

这应该打印第二个可观察值(来自您的store)。如果同时需要两者,则可以使用forkJoinswitchMap,或者仅将action的值保存到某个外部作用域变量。

答案 1 :(得分:0)

仅作记录,这是有效的方法:

mergeMap((action) => forkJoin(
  of(action),
  this.store.pipe(select(selectBim(action.payload))).take(1),
  this.store.pipe(select(selectCurrentBim)).take(1)
)),
map(([action, requestedBim, currentBim]) => ({requestedBimId: action.payload, requestedBim, currentBim})),

现在我可以访问mergeMap之后的map语句中的所有数据

如果您不需要在withLatestFrom

给出的参数中访问action,则

withLatestFrom更简洁