无法获取takeUntil取消请求

时间:2018-10-21 19:45:37

标签: redux rxjs redux-observable

调度SEARCH之后,我试图取消AJAX请求,但也保持可观察的监听。我正在使用takeUntil并等待CLEAR_SEARCH_RESULTS类型的操作来取消请求。

这是我的史诗:

const searchEpic = action$ =>
    action$.ofType(SEARCH).pipe(
        debounceTime(500),
        switchMap(({ payload }) =>
            search(query).pipe(
                map(({ response }) => SearchActions.searchSuccess(response)),  // dispatches SEARCH_SUCCESS
                takeUntil(
                    action$.ofType(CLEAR_SEARCH_RESULTS)
                )
            )
        )
    )

编辑:我有一个Redux记录器,该记录器按以下顺序输出已调度的动作:

  1. SEARCH
  2. SEARCH
  3. SEARCH
  4. SEARCH
  5. CLEAR_SEARCH_RESULTS
  6. SEARCH_SUCCESS

(每个SEARCH是一个按键)

1 个答案:

答案 0 :(得分:1)

我通过将takeUntil移到switchMap外面并在其后放置repeat()来解决它,就像这样:

const searchEpic = action$ =>
    action$.ofType(SEARCH).pipe(
        debounceTime(500),
        switchMap(({ payload }) =>
            search(query).pipe(
                map(({ response }) => SearchActions.searchSuccess(response))
            )
        ),
        takeUntil(action$.ofType(CLEAR_SEARCH_RESULTS)),
        repeat()
    )

问题在于,史诗仅在CLEAR_SEARCH_RESULTS的500ms之后才开始监听debounceTime,这不是我想要的。

所有功劳归this answerJay Phelps,归功于Evert Bouw,以便在Gitter上找到并指出给我。