Rxjs Redux Observable:如果同一个操作被调度多次,如何取消其中一个操作?

Rxjs Redux Observable:如果同一个操作被调度多次,如何取消其中一个操作?,rxjs,redux-observable,Rxjs,Redux Observable,我有一部史诗: export const getUserEpic = action$ => action$ .ofType(t.GET_USER) .mergeMap(action => Observable .from(query.findUser(action.uid)) .map(user => ({ type: t.GET_USER_SUCCESS, user })) .takeUntil(action$.ofType(t.GET_USE

我有一部史诗:

export const getUserEpic = action$ => action$
  .ofType(t.GET_USER)
  .mergeMap(action => Observable
    .from(query.findUser(action.uid))
    .map(user => ({ type: t.GET_USER_SUCCESS, user }))
    .takeUntil(action$.ofType(t.GET_USER_CANCELLED))
然后,在某个地方,我多次发送了
t.GET\u USER

dispatch({ type: t.GET_USER, uid: 'uid1' })
dispatch({ type: t.GET_USER, uid: 'uid2' })
dispatch({ type: t.GET_USER, uid: 'uid3' })
如何取消其中一个?例如:

dispatch({ type: t.GET_USER_CANCELLED, uid: 'uid2' })

好的,
.takeUntil(类型为(t.GET\u USER\u CANCELLED)的action$)
将取消所有
t.GET\u USER
操作。我只需要取消一个。

您可以使用
.filter()
谓词仅取消订阅您要查找的确切
uid
的合并映射:

export const getUserEpic=action$=>action$
.of类型(t.GET\u用户)
.mergeMap(操作=>可观察
.from(query.findUser(action.uid))
.map(user=>({type:t.GET\u user\u SUCCESS,user}))
.takeUntil(
行动$
.of类型(t.GET\u USER\u已取消)
.filter(act=>act.uid===action.uid)
)

您可以使用
.filter()
谓词仅取消订阅您要查找的确切
uid
的合并映射:

export const getUserEpic=action$=>action$
.of类型(t.GET\u用户)
.mergeMap(操作=>可观察
.from(query.findUser(action.uid))
.map(user=>({type:t.GET\u user\u SUCCESS,user}))
.takeUntil(
行动$
.of类型(t.GET\u USER\u已取消)
.filter(act=>act.uid===action.uid)
)

你可以使用
switchMap
而不是
mergeMap
,但这实际上取决于你的应用程序的逻辑。你可以使用
switchMap
而不是
mergeMap
,但这确实取决于你的应用程序的逻辑。这太棒了。非常感谢。这太棒了。非常感谢。