// 全局请求队列(存储所有请求)
|
const requestQueue = []
|
|
// 取消所有请求
|
export function cancelAllRequest() {
|
requestQueue.forEach((task) => {
|
try {
|
task.abort()
|
} catch {}
|
})
|
requestQueue.length = 0
|
}
|
|
// 从队列移除
|
function removeTask(task) {
|
const index = requestQueue.indexOf(task)
|
if (index > -1) requestQueue.splice(index, 1)
|
}
|
|
// ==============================================
|
// 重写原生 uni.request
|
// ==============================================
|
export function overrideUniRequest() {
|
const _originalRequest = uni.request
|
|
uni.request = function (options) {
|
|
const originalSuccess = options.success
|
const originalFail = options.fail
|
|
|
options.success = function (res) {
|
removeTask(task)
|
originalSuccess && originalSuccess(res)
|
}
|
|
options.fail = function (err) {
|
removeTask(task)
|
|
|
if (err.errMsg && err.errMsg.includes('abort')) {
|
return
|
}
|
|
originalFail && originalFail(err)
|
}
|
|
|
const task = _originalRequest.call(uni, options)
|
|
|
requestQueue.push(task)
|
|
return task
|
}
|
}
|