Я использую Вью и Аксиос, я пытаюсь показать прогресс в процентах в консоли.
Сам запрос занимает 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)


![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Мы не знаем, сколько времени потребуется серверу, чтобы ответить, вы не можете показать процент индикатора выполнения в этот момент времени. Если это потоковые данные, мы можем показать прогресс. Для этого вы можете имитировать такой вид эффекта, прежде чем сделать вызов, установите состояние вашего индикатора выполнения, чтобы показать, а затем поместите некоторый случайный процент в заданный метод интервала, затем после получения ответа пересчитайте и продолжите состояние прогресса с этой точки.
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
})