在Redux可观察的史诗中,为什么我们可以过滤一种类型的动作流,但仍然可以访问另一种类型的动作流

时间:2019-03-24 18:12:14

标签: rxjs race-condition redux-observable cancellation

在{redux-observable官方文档的cancellation examples中,我们首先按类型过滤操作流action $,然后将ajax调用与其他类型的操作流进行竞争。 我不明白如何将FETCH_USER_CANCELLED类型的action $通过第一个ofType(FETCH_USER)过滤器。

这是一个例子

const fetchUserEpic = action$ => action$.pipe(
  ofType(FETCH_USER),
  mergeMap(action => race(
    ajax.getJSON(`/api/users/${action.payload}`).pipe(
      map(response => fetchUserFulfilled(response))
    ),
    action$.pipe(
      ofType(FETCH_USER_CANCELLED),
      map(() => incrementCounter()),
      take(1)
    )
  ))
);

为什么在类型过滤器的第一个过滤器上不需要'FETCH_USER_CANCELLED'?

action$.pipe(
  ofType(FETCH_USER, FETCH_USER_CANCELLED),
  ...

如果有人可以解释,将不胜感激。

1 个答案:

答案 0 :(得分:0)

在上面的示例中,您两次使用了未经过滤的action$流。 ofType(FETCH_USER)过滤器仅适用于pipe中的后续运算符(也就是其后的mergeMap)。