借鉴b站远方os,up博主的方法
js重复请求只调用一次,多次调用只返回第一次调用的结果。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
</style>
</head>
<body>
</body>
<script>
let _fecth = async (params) => {
let query = new URLSearchParams(params).toString()
let res = await fetch(`https://api.github.com/users/octocat?${query}`, { headers: { 'Content-Type': 'application/json' } })
return res.json()
}
function requestFilter(cb) {
let reqTask = {}
return (...args) => reqTask[JSON.stringify(args)] ??= new Promise(async (resolve, reject) => cb(...args)
.then(resolve, reject)
.finally(() => delete reqTask[JSON.stringify(args)]))
}
const asyncOnce = requestFilter(_fecth)
asyncOnce({ obj: 'name1' }).then((res) => {
console.log('请求1', res);
})
asyncOnce({ obj: 'name1' }).then((res) => {
console.log('请求2', res);
})
asyncOnce({ obj: 'name1' }).then((res) => {
console.log('请求3', res);
})
</script>
</script>
</html>
以上就是全部代码,可以根据自己的业务场景,再进一步处理