乐闻世界logo
搜索文章和话题

Axios 如何在 get 请求期间获取的请求进度?

4 个月前提问
3 个月前修改
浏览次数21

1个答案

1

在 Axios 中,可以通过使用 onDownloadProgress 属性来监听 GET 请求期间的下载进度。这个属性允许你设置一个处理函数,它会接收到一个 ProgressEvent 对象作为参数。这个对象包含了关于请求进度的信息,比如已经下载的字节数以及总字节数。

下面是一个如何使用 onDownloadProgress 来获取下载进度的例子:

javascript
axios.get('/your-endpoint', { onDownloadProgress: function(progressEvent) { // `progressEvent` 包含了一个 `loaded` 属性和 `total` 属性 // `loaded` 是已经下载的字节数 // `total` 是响应的总字节数(如果 `Content-Length` 头部被设置) if (progressEvent.lengthComputable) { // 计算进度百分比 const percentCompleted = Math.round((progressEvent.loaded * 100) / progressEvent.total); console.log(`下载进度:${percentCompleted}%`); } else { // 无法计算进度(没有总长度信息) console.log('已下载', progressEvent.loaded, '字节'); } } }) .then(response => { // 请求成功后的处理 console.log('下载完成', response); }) .catch(error => { // 请求失败的处理 console.error('下载出错', error); });

在这个例子中,当 GET 请求被发出时,Axios 会定期调用 onDownloadProgress 函数,并传递进度事件(ProgressEvent)信息。在这个函数中,你可以提取进度信息并执行你需要的任何逻辑,比如更新UI以显示进度条。

需要注意的是,进度信息的可靠性取决于服务端是否提供了正确的 Content-Length 头部。如果这个头部没有被设置或者设置不正确,progressEvent.total 将是 0,这样就无法计算出具体的进度百分比了。在这种情况下,你只能显示已下载的字节数,而不能显示具体的进度条。

2024年6月29日 12:07 回复

你的答案