场景:
点击导出Excel按钮实现,姓名列表中前五个的所有的文章数据发送给后端,姓名列表中点击过的数据会被存放到localStorage中;
思路:
点击导出按钮,把前五个数据逐个和localStorage中的数据对比,找到前五个中没有发送请求的数据,放到数组中,然后对这些没有请求的数据进行一次多并发请求,把多并发请求到的数据存储到浏览器中,再统一按照前五名的姓名顺序到localStorage中拉取数据,提交后台;
问题:
如何一次发送多个请求?
解决办法:
方法一:
getNameData(name,affiliation){return this.$axios.get("/api/academic/paper_search", {
params: {
name: name,
affiliation: affiliation
}
})
},
sendAllAxios(){
let arr=[]this.getFiveNameData.forEach(item =>{if(!JSON.parse(localStorage.getItem("baseInfo"))[item.name]){
arr.push(this.getNameData(item.name,item.affiliation))
}
});return new Promise((resolve,reject)=>{if(arr.length){this.$axios.all(arr).then((res)=>{
res.forEach(item=>{if(item.status == 200){this.baseInfo[item.config.params.name] =item.data
}
})
localStorage.setItem("baseInfo",JSON.stringify(this.baseInfo))
resolve()
}).catch(e=>{console.log(e)})
}else{
let sendData={}this.getFiveNameData.forEach(item =>{
sendData[item.name]= JSON.parse(localStorage.getItem("baseInfo"))[item.name]
})
resolve(sendData)
}
})
},
方法二:
Promise.all(arr).then(res=>{ })
踩坑:
this.$axios.all(arr).then((res)=>{})中then的第一个参数是一个数组,表示所有请求的信息;
this.$axios.all(arr).then(this.$axios.spread(function (acct, perms){ }) 这种方式是请求返回的数据形式的数据逐个展开,acct表示请求返回后数组中的第一条数据,perms表示第二条数据,
注意:
spread是在确定几个请求一起发的情况下用