xhr fetch 监控响应进度
xhr axios
fetch umi-request
功能点 | XHR | fetch |
---|---|---|
基本的请求能力 | ✔ | ✔ |
基本的获取响应能力 | ✔ | ✔ |
监控请求进度 | ✔ | x |
监控响应进度 | ✔ | ✔ |
servie worker 中是否能用 | x | ✔ |
控制cookie的携带 | x | ✔ |
控制重定向 | x | ✔ |
请求取消 | ✔ | ✔ |
自定义referrer | x | ✔ |
流 | x | ✔ |
api风格 | event | promise |
活跃度 | 停止更新 | 不断更新 |
export function request(options={}){
const {url,method='GET',onProgress,data=null}=options;
return new Promise((resolve)=>{
const xhr=new XMLHttpRequest();
xhr.addEventListener('readystatechange',()=>{
if(xhr.readyState===xhr.DONE){
resolve(xhr.responseText)
}
})
xhr.upload.addEventListener('progress',e=>{
console.log(e.loaded,e.total); //请求监听
})
xhr.addEventListener('progress',(e)=>{//响应监听
console.log(e.loaded,e.total); //目前过来 总的
onProgress&&onProgress({
loaded:e.loaded,
total:e.total
})
})
xhr.open(method,url)
xhr.send(data)
})
}
// 监控响应进度
export function request(options){
const {url,method='GET',onProgress,data=null}=options;
return new Promise(async (resolve)=>{
const resp=await fetch(url,{
method,
body:data,
})
const total=+resp.headers.get('content-length'); //总的数据量
const decoder=new TextDecoder()
let body='';
const reader=resp.body.getReader();//可读流
let loaded=0;//当前的数据量
while(1){
const {done,value}=await reader.read()
if(done){
break;
}
loaded+=value.length;
body+=decoder.decode(value)
onProgress&&onProgress({
loaded,total
})
}
})
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探