记录在工作中碰到的问题,同接口同时多次触发(不同参数),因带宽等多种原因导致后端处理顺序打乱,最终入库数据不对。 自己想了一个发起接口队列的方式来解决这种问题,有什么好的思路方法希望掘友多多评论!
// 队列
var queue = [];
// 为了唤起第一次循环
var first = null;
// 模拟触发300发起一次请求
var timer = null;
timer = setInterval(() => {
console.log('发起了一个请求')
queue.push('请求参数:'+ Math.random())
if(!first) {
first = '开始'
firstEvent();
}
}, 300)
// 3秒后停止发起请求
setTimeout(() => {
console.log(timer, '我来关闭发起')
if(timer) {
clearInterval(timer)
timer = null
}
}, 3000)
// 请求接口
function request(params) {
return new Promise(resolve => {
// 模式每次接口处理需要1000毫秒
console.log('请求处理开始')
setTimeout(() => {
console.log('处理了一个请求:'+ new Date().toLocaleTimeString() + ',params:' + params)
queue.shift()
resolve()
}, 1000)
})
}
// 唤起方法
var firstEvent = async () => {
// 队列循环
console.log('queue', queue.length)
while ( queue.length > 0 ) {
await request(queue[0])
}
}