Axios interceptors и вывод сообщения об асинхронной загрузке

169
07 апреля 2019, 07:30

Использую vue.js и axios для отправки запросов к API. Есть необходимость глобально настроить отображение заглушки на весь экран, если запрос выполняется долго

  • Отправляем запрос. Если он длится более 500мс, то отображаем заглушку на весь экран
  • Если ошибка запроса - выводим сообщение об ошибке
  • В случае успешного запроса ничего не выводим

Выяснилось, что axios можно настроить глобально, чтобы отлавливать действия до момента отправки запроса, после получения ответа, а также ловить ошибки. В общем виде это выглядит так

axios.interceptors.request.use((config) => {
    // Do something before request is sent
    return config;
  }, (error) => {
    // Do something with request error
    return Promise.reject(error);
  });
// Add a response interceptor
axios.interceptors.response.use((response) => {
    // Do something with response data
    return response;
  }, (error) => {
    // Do something with response error
    return Promise.reject(error);
  });

Для вывода сообщений пользователю использую библиотеку f3oall/awesome-notifications (есть отдельный билд для vue). В документации указано, что заглушка на весь экран выводится вот так

asyncBlock(promise, onResolve, onReject, html)

Также можно отдельно завершать успехом или ошибкой

notifier.asyncBlock(Promise.resolve("all done")) // won't show anything after promise resolved
notifier.asyncBlock(Promise.reject("some error")) // will show a new alert toast with message "some error"

Однако как можно это использовать вместе с axios.interceptors не понимаю. Ведь у меня два interceptors. И как в первом, например, начать asyncBlock, а во втором закончить?

Как быть? Может есть другие варианты?

READ ALSO
npm run build. Как правильно?

npm run build. Как правильно?

Есть проект create-react-buildПосле сборки webpack добавляет к src всех файлов стилей, js лишний слеш вначале (см

208
Динамическое изменения языка

Динамическое изменения языка

У нас есть небольшой интернет магазин, из базы подгружается описания товараУ сайта есть 3 версии языка en, ru и italian

178
Drag and Drop. Файл открывается в браузере

Drag and Drop. Файл открывается в браузере

столкнулся со следующей проблемой - не получается отменить действие браузера по умолчанию при перетаскивании файла с рабочего стола, тобишь...

173