其他分享
首页 > 其他分享> > 请求合并:短时间内需要请求多个资源合并成一个请求发送

请求合并:短时间内需要请求多个资源合并成一个请求发送

作者:互联网

题目:

// 首先有一个接口其请求路径为 /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