我正在研究一个有角度的项目,并使用最新版本的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
。
是,您可以使用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运算符之后发射