combineLatest,但仅发射一次

问题描述 投票:0回答:1

我正在研究一个有角度的项目,并使用最新版本的ngrx。我想要组合以下几种可观察对象,从而产生效果:

loadSavedReplies = createEffect(() => this.actions$.pipe(
  ofType(SavedRepliesActions.SavedRepliesRequested),
  mergeMap(action => combineLatest( of (action),
    this.store.pipe(select(currentUser), filter(u => u != null))
  )),
  map((s) => SavedRepliesActions.SavedRepliesLoaded({
    SaveReplies: s.model,
    a: action.id
  }))
));

我的问题是,即使当前用户更改,并且CombineLatest仍在发射。我想要的只是从combineLatest()中获取一个发射。我只能在take(1)中简单地添加store.pipe,这样select(currentUser)就不会再次触发CombineLatest,但这是正确的方法。当我仅想获得一个发射光时,我在效果中使用take(1)时是否需要添加combineLatest

angular ngrx ngrx-effects
1个回答
0
投票

是,您可以使用combineLatest,但我认为zip运算符是最适合您的选择(无论如何,您都需要额外的take运算符)

loadSavedReplies = createEffect(() => this.actions$.pipe(
  ofType(SavedRepliesActions.SavedRepliesRequested),
  mergeMap((action)=>zip(of(action), this.store.pipe(select(currentUser),filter(...))).pipe(take(1)),
  map(([action,model]) => SavedRepliesActions.SavedRepliesLoaded({
    SaveReplies: s.model,
    a: action.id
  }))
));

zip将在可观察到的发射以及完整的使用take运算符之后发射

© www.soinside.com 2019 - 2024. All rights reserved.