let taskList = []
let map = new Map()
let id = 0
function delay (t) {
return new Promise(resolve => setTimeout(resolve, t))
}
// 循环体中,储存完数据后最终及时销毁,避免造成内存泄漏
async function run (id, handler, timegap) {
while (taskList.indexOf(id) > -1) {
map.set(id, handler())
try {
map.get(id)
} catch (error) {
throw new Error(error)
} finally {
map.delete(id)
}
await delay(timegap)
}
}
export function clearInterval (id) {
const index = taskList.indexOf(id)
if (typeof id === 'number' && index > -1) {
if (map.has(id)) map.get(id)
taskList.splice(index, 1)
}
}
export function clearAllInterval () {
taskList = []
map.clear()
}
export default function setInterval (handler, timegap) {
id += 1
taskList.push(id)
run(id, handler, timegap)
return id
}
轮询工具函数
最新推荐文章于 2023-01-29 16:11:19 发布