Angular 是否有类似于withLatestFrom但带有参数的RxJS运算符?

Angular 是否有类似于withLatestFrom但带有参数的RxJS运算符?,angular,rxjs,ngrx,Angular,Rxjs,Ngrx,我的Angular 5应用程序基于,一个类似于Redux但基于RxJS的状态管理库 我经常需要根据当前操作的有效负载从存储中获取最新的值 在RxJS术语中,这意味着我拥有不断生成项目的主流,对于每个新项目,我需要根据项目的价值创建一个副流,从这个流中获取最新的价值,并将其与主流相结合 现在,我做了这样的事情: @Effect() public moveCursor$: Observable<Action> = this.actions$.pipe( ofType<Table

我的Angular 5应用程序基于,一个类似于Redux但基于RxJS的状态管理库

我经常需要根据当前操作的有效负载从存储中获取最新的值

在RxJS术语中,这意味着我拥有不断生成项目的主流,对于每个新项目,我需要根据项目的价值创建一个副流,从这个流中获取最新的价值,并将其与主流相结合

现在,我做了这样的事情:

@Effect()
public moveCursor$: Observable<Action> = this.actions$.pipe(
  ofType<TableAction.MoveCursor>(TableActionType.MOVE_CURSOR),
  switchMap(action => this.store$.select(selectTableById(action.payload.cursor.tableId)).pipe(
    first(),
    map(table => ({action, table}))
  )),
  map(({action, table}) => {
    ...
  })
)

因此,我的问题是:是否有任何RxJS运算符类似于
withLatestFrom
,它可以将第一个流产生的值作为参数?

您可以使用
mergeMap
map
将操作与从存储中选择的表相结合:

@Effect()
public moveCursor$:Observable=此.actions$.pipe(
ofType(TableActionType.MOVE_游标),
mergeMap(action=>this.store$
.select(selectTableById(action.payload.cursor.tableId))
.烟斗(
第一个(),
映射(表=>[操作,表])
)
),
映射([操作,表])=>{
...
})
)
您需要首先使用
获取(1)
,以确保从存储中选择的内部可观察对象只发出一个值,即要与操作组合的表。

我终于做到了

doEffect$ = this.actions$.pipe(
    ofType<someAction>(losActionTypes.someAction),
    switchMap/mergeMap/concatMap(    // according to your logic
    action => of(action).pipe(
       withLatestFrom(this.store.pipe(select(leFancySelector)))
    )),
    tap(console.log)    // tap if you don't believe me
doEffect$=此.actions$.pipe(
ofType(losActionTypes.someAction),
switchMap/mergeMap/concatMap(//根据您的逻辑
action=>of(action).pipe(
withLatestFrom(this.store.pipe(select(leFancySelector)))
)),
点击(console.log)//如果你不相信我,点击

谢谢。但即使没有调度新操作,但存储中表的值已更改,它也会开始生成新值吗?是的,您是对的,它会。您也需要先使用
获取(1)
doEffect$ = this.actions$.pipe(
    ofType<someAction>(losActionTypes.someAction),
    switchMap/mergeMap/concatMap(    // according to your logic
    action => of(action).pipe(
       withLatestFrom(this.store.pipe(select(leFancySelector)))
    )),
    tap(console.log)    // tap if you don't believe me