Redux-thunk и axios - отмена запроса - PullRequest
0 голосов
/ 23 июня 2018

У меня есть приложение с redux-thunk, redux-pack и axios на борту.

Мои действия выглядят так:

export const getEntities = () => (dispatch, getState, { api }) => {
  return dispatch({
    type: ENTITIES_LOAD,
    promise: api.getEntities(),
    meta: {},
  });
};

Я звоню им componentDidMount.

Мой вопрос - каков наилучший способ отменить эти действия вместе с самим запросом?Я читал о Cancel Token, который axios использует, но как мне сначала отменить действие?

1 Ответ

0 голосов
/ 02 июля 2018

Я обнаружил, что отменяю запросы, используя токены отмены. Какой-то выход из этой проблемы, но я прикрепил их к глобальной переменной (например, window), поэтому каждый раз, когда делается запрос, новый токен добавляется к объекту (с его собственным ключом), и каждый раз запрос завершен, этот ключ удален.

Итак, у меня есть что-то подобное в клиентской части приложения:

window.cancellationTokens = { myOwnTokenKey: theActualToken }

Если необходимо отменить запрос (например, пользователь покидает маршрут, который получает данные на componentDidMount), я просто делаю:

cancelRequest(nameOfTheKey);

Функция с именем cancelRequest принимает один аргумент, то есть фактический ключ запроса, и выглядит следующим образом:

const cancelRequest = (keyName) => {
    if (typeof window === 'undefined') return;
    const cancelMethod = window.cancellationTokens[keyName];
    if (!cancelMethod) return;
    cancelMethod();
}
...