Не могу получить takeUntil, чтобы отменить запрос - PullRequest
0 голосов
/ 21 октября 2018

После отправки 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)
                )
            )
        )
    )

Редактировать: Iиметь регистратор Redux, который выводит отправленные действия в следующем порядке:

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

(каждое SEARCH является нажатием клавиши)

1 Ответ

0 голосов
/ 24 октября 2018

Я решил это, переместив 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 только после 500 мсек debounceTime, что не то, что я хотел.

Вся заслуга этого ответа Джея Фелпса и Evert Bouw за то, что нашел и указал мне на Gitter .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...