Обычный ход GET-запроса Axios

Что я пытаюсь сделать:

Я использую Вью и Аксиос, я пытаюсь показать прогресс в процентах в консоли.

Проблема в следующем:

Сам запрос занимает 4 секунды или, может быть, больше, потому что он получает много данных и сохраняет их в excel, а затем в Загрузить.

Что я пробовал:

Я нашел два метода в Аксиос: onDownloadProgress и onUploadProgress.

Функция onDownloadProgress работает нормально, но только когда начинается загрузка, а не когда серверная часть извлекает данные в файл Excel (что занимает большую часть времени).

Вот интерфейсный код:

axios.get(`${env.ENDPOINT}reports/products/credits_export`, {
    params: {
      category_id: form_data.category_id
    },
    responseType: 'blob',
    onDownloadProgress: (progressEvent) => {
      let percentCompleted = Math.round((progressEvent.loaded * 100) / progressEvent.total);
      console.info(progressEvent.lengthComputable);
      console.info(percentCompleted);
    }
  }).then((res) => {
    const url = window.URL.createObjectURL(new Blob([res.data]));
    const link = document.createElement('a');
    const file_name = `${new Date().toISOString().slice(0,10)}.xlsx`;
    link.href = url;
    link.setAttribute('download', file_name);
    document.body.appendChild(link);
    link.click();
    resolve(res.data);
  }).catch((e) => {
    reject(e);
  });

ЛЕТО:

Мой прогресс будет разделен на две части:

  • Прогресс загрузки (будет использовать onDownloadProgress)
  • Ход запроса (который готовит файл Excel к загрузке)
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
2 028
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Мы не знаем, сколько времени потребуется серверу, чтобы ответить, вы не можете показать процент индикатора выполнения в этот момент времени. Если это потоковые данные, мы можем показать прогресс. Для этого вы можете имитировать такой вид эффекта, прежде чем сделать вызов, установите состояние вашего индикатора выполнения, чтобы показать, а затем поместите некоторый случайный процент в заданный метод интервала, затем после получения ответа пересчитайте и продолжите состояние прогресса с этой точки.

this.progress =true;
let interval = setInterval(()=>{
this.progressPercentage = randomFunction()
 // some random calculation for progress
},500)
axios.get(url)
.then(()=>{
   clearInterval(interval);
   // User your progress event object 
})

Другие вопросы по теме