前言:
开发时使用uview倒计时组件遇到接口同时调用的问题,节流防抖都没用
如图所示,当倒计时结束时调用某个接口,但是这个接口会被同时调用很多次(次数纯随缘)
代码:
// 定义一个全局变量,用于存储请求队列
let requestQueue = []
// 封装请求函数
request(url, data) {
return new Promise((resolve, reject) => {
// 将请求加入队列
requestQueue.push({ url, data, resolve, reject })
// 如果队列中只有一个请求,则立即发送请求
if (requestQueue.length === 1) {
this.sendRequest(requestQueue[0])
}
})
}
// 发送请求函数
sendRequest(requestItem) {
uni.request({
url: requestItem.url,
data: requestItem.data,
success: res => {
// 将请求从队列中移除
requestQueue.shift()
// 处理请求结果
requestItem.resolve(res)
// 如果队列中还有请求,则继续发送请求
if (requestQueue.length > 0) {
this.sendRequest(requestQueue[0])
}
},
fail: err => {
// 将请求从队列中移除
requestQueue.shift()
// 处理请求失败
requestItem.reject(err)
// 如果队列中还有请求,则继续发送请求
if (requestQueue.length > 0) {
this.sendRequest(requestQueue[0])
}
}
})
}
使用方法:
// 调用请求函数
request('https://www.********/api', { param: 'value' })
.then(res => {
console.log(res)
})
.catch(err => {
console.error(err)
})