Skip to content

axios

xhr

进度监控

xhr.progress事件

js
xhr.addEventListener('process', (e) => {
    console.log(e.loaded / e.total);
});
xhr.upload.addEventListener('progress')

fetch

总数据量:响应头Content-length resp.body.getReader 读取返回的流 累加reader.read()读取的数据量,然后计算百分比,更新到进度条上

js
const resp = await fetch(url);
const total = resp.headers.get('content-length');
const decoder = new TextDecoder();
let body=''
const reader = resp.body.getReader();
let loaded = 0;
while(1) {
    const { value, done } = await reader.read();
    if (done) break;
    body += decoder.decode(value);
    loaded += value.length;
    console.log(loaded / total);
}

正确做法应该是重新创建一个readable stream,劫持response,用新的readable stream填充,因为你不能代替用户把stream读了,而是应该在用户读stream的时候计算进度,这不是一样的概念

苏ICP备2025160170号-1 | 前端进化之路 | Released under the MIT License.