首次提交:初始化项目代码

This commit is contained in:
sunct
2026-07-31 14:42:05 +08:00
commit ecca407485
84 changed files with 24158 additions and 0 deletions
+67
View File
@@ -0,0 +1,67 @@
const cache = new Map()
const CACHE_TTL = 30000
const PENDING = new Map()
export const cachedRequest = async (key, requestFn, ttl = CACHE_TTL) => {
const now = Date.now()
const cached = cache.get(key)
if (cached && now - cached.time < ttl) {
return cached.data
}
if (PENDING.has(key)) {
return PENDING.get(key)
}
const promise = requestFn().then(data => {
cache.set(key, { data, time: Date.now() })
PENDING.delete(key)
return data
}).catch(err => {
PENDING.delete(key)
throw err
})
PENDING.set(key, promise)
return promise
}
export const clearCache = (key) => {
if (key) {
cache.delete(key)
} else {
cache.clear()
}
}
export const getCacheKey = (prefix, params) => {
return `${prefix}:${JSON.stringify(params || {})}`
}
export const createCachedRequest = (cachePrefix) => {
return async (url, config = {}) => {
const key = getCacheKey(cachePrefix || url, config.data)
return cachedRequest(key, () => {
if (typeof config.request === 'function') {
return config.request(url, config)
}
return new Promise((resolve, reject) => {
uni.request({
url: url,
method: config.method || 'POST',
data: config.data || {},
header: config.header || {},
timeout: config.timeout || 15000,
success: (res) => resolve(res.data),
fail: (err) => reject(new Error(err.errMsg || '请求失败'))
})
})
}, config.cacheTTL)
}
}
export default {
cachedRequest,
clearCache,
createCachedRequest
}