js fetch 同步请求
一. 声明 函数修改 fetch
//fetch 同步请求
const run = (func) => {
let cache = [];//存储模拟请求信息
let i = 0;//声明坐标
const _originalFetch = window.fetch;//重新获取一个新的 fetch
window.fetch=(...args)=>{//修改 fetch请求
if(cache[i]){
if(cache[i].status == 'fulfilled'){// 成功
return cache[i].data;
}
if(cache[i].status == 'rejected'){//失败
throw cache[i].err;
}
}
const result = {//声明数据格式
status:'pending',
data:null,
err:null
};
cache[i++] = result;
//虚拟发送请求
var prom = _originalFetch(...args).then((response) => response.json()).then((resp)=>{
result.status = 'fulfilled';// 成功
result.data = resp;
},(err) =>{
result.status = 'rejected';//失败
result.data = err;
})
//报错
throw prom;
};
try {
func();
} catch (error) {
if(error instanceof Promise){//异常捕获
const reRun = ()=>{
i = 0;
func();
}
error.then(reRun,reRun)//如果异常 继续执行 func函数
}
}
}
//获取 请求
function fetchUrl(){
return fetch('http://ddd/dddd');
}
//主方法
function main(){
const data = fetchUrl();
console.log(data);
}
run(main);//加载