调度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记录器,该记录器按以下顺序输出已调度的动作:
SEARCH
SEARCH
SEARCH
SEARCH
CLEAR_SEARCH_RESULTS
SEARCH_SUCCESS
(每个SEARCH
是一个按键)
答案 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 answer归Jay Phelps,归功于Evert Bouw,以便在Gitter上找到并指出给我。