@jurapuris
Front-end developer

Как остановить асинхронную очередь?

Есть запрос
let CancelToken = axios.CancelToken; 
let cancel;

loadData: _.debounce(function (paramLogOut=false) {

        if (cancel != undefined && paramLogOut) {
          cancel();
          return true;
        }

        axios
          .post(params.url, params.data, {
            cancelToken: new CancelToken(function executor(c) {
              cancel = c;
            })
          })
          .then(response => {
            ... response
          })
          .catch((error) => {
            if (!axios.isCancel(error)) {
              this.showNoty('error', 'Что-то пошло не так... Данные не удалось загрузить');
              console.error(error);
            }
          })
      }, 75)


Также есть к примеру функция для выхода (log out):

logOut() {
        if (window.location.origin.search('127.0.0.1:9090') !== -1) {
          window.location.href = app.$axios.defaults.baseURL + '/Account/Logout';
        } else {
          window.location.href = '/Account/Logout';
        }
      }


Суть проблемы

Когда пользователь заходит / делает возможные настройки и т.д. ... работает запрос.
Запрос может длится исходя от настроек разное время.
Если в момент начала запроса нажать на "Выйти" (Log out) то window.location.href ждёт окончания этого запроса, потом срабатывает переход и разлогивание....

Я использовал закрытие запроса (axios cancel), чтобы очередь дошла быстрее до перехода.
Запрос кэнселится, но window.href не сразу отрабатывает. Не сразу отрабатывает когда есть этот запрос даже если закрытый уже. В остальных случаях моментально переход происходит.
  • Вопрос задан
  • 405 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы