请求合并:短时间内需要请求多个资源合并成一个请求发送
作者:互联网
题目:
// 首先有一个接口其请求路径为 /path
// query有一个id参数支持传一个或者多个id
// /path?id=1
// /path?id=1,2,3
// /path?id=1,2
// 返回内容格式为(假设请求的query是 id=1,2)
const demoRes = {
1:{
data:{}
},
2:{
data:{}
}
}
// request的构成
request({
url:'/path',
query:{
id:''
}
})
// 下面是使用场景实现,每个方法回调最终拿到的是自己需要的内容
getArticle(3).then(res=>{})
getArticle(4).then(res=>{})
getArticle(5).then(res=>{})
getArticle(6).then(res=>{})
// 实现这个getArticle方法
这里的参考方式参考了Promise.all的实现方法
具体实现思路如下
1.首先短时间内要保存多个参数,在这里使用闭包实现
// 请求方式暂时
function request(obj){
let demoRes = {}
obj.query.split(',').forEach(element => {
let item = {data:{}}
demoRes[element] = item
});
return demoRes
}
function post(arrs){
let query = arrs.toString()
return new Promise((resolve,reject) =>{
let demoRes = request({"query":query})
resolve(demoRes)
})
}
var getArticle = (function(){
var arrs = []
var allGets = new Map()//记录了当前所有的promise
var flags = false
var result
// 一段时间没有请求进入就开始提交整个参数
setTimeout(()=>{
flags = true
post(arrs).then(res => {
result = res
/* console.log(res) */
})
},1000)
return function(num){
let re = new Promise((resolve,reject) =>{
setTimeout(()=>{
resolve(result[num])
},2000)
})
arrs.push(num)
//使用map来保证消息的返回
allGets.set(num,re)
return re
}
})()
getArticle(1).then(res =>{console.log(res)})
getArticle(2).then(res =>{console.log(res)})
getArticle(3).then(res =>{console.log(res)})
getArticle(4).then(res =>{console.log(res)})
标签:短时间,请求,res,合并,console,getArticle,query,demoRes,id 来源: https://www.cnblogs.com/dark-duck/p/14287600.html