javascript - Axios onDownloadProgress 直到传输结束之前才会触发
问题描述
我正在关注有关构建全栈 MERN 应用程序的教程,其中我试图使用Axios获取 74 个帖子的集合,其中每个帖子都有一个图像,因此总大小约为 16Mb。由于我的网速不佳,我需要几分钟才能下载,所以我尝试通过以下简单方法创建进度指示器:
export const fetchPosts = () => axios.get(url,
{
onDownloadProgress: progressEvent => {
let loadingValue = Math.floor(progressEvent.loaded / progressEvent.total * 100);
store.dispatch(updateLoadingValue(loadingValue));
}
});
对于状态管理,显然我正在使用redux,在redux-thunk的帮助下,您可以在这个动作创建者中看到:
export const getPosts = () => async (dispatch) => {
try {
const { data } = await fetchPosts();
dispatch(
{ type: 'FETCH_ALL', payload: data }
);
} catch (error) {
console.log(error.message);
}
}
问题是没有调用回调函数,因此加载进度保持为 0%,直到下载过程完成之前,它会快速触发几个具有加载值的连续调用,例如:31% 61% 80% 100%
我在互联网上到处搜索,我想到了使用流或blob而不是json响应类型的想法,但认为这感觉像是想多了(仅 16MB 不是最佳选择)并且我在第一种方法中遗漏了一些东西。
那么是否有可能进行更实时的下载进度更新,或者我应该以不同的方式进行?
解决方案
推荐阅读
- javascript - 内部文本的查询选择器
- javascript - 如何修复此错误 TypeError: Converting circular structure to JSON --> 从带有构造函数 'Window' 的对象开始
- java - 如何将异常从 lambda 抛出到调用方法?
- javascript - 无法读取未定义的属性(读取“应用程序”)
- javascript - 刷新另一个功能组件
- pyinstaller - 如何摆脱错误“_ms sql”未找到
- c++ - 在结构中使用数组时获得意外输出
- python - SageMath/Python:使用科学记数法导致方程被错误评估
- node.js - sequelize 创建具有生成值的列
- html - Cookie 栏没有关闭?