import { AnyFunc } from "./types" import { QPromise } from "./utils" export const debounce = (time: number, fn: T) => { let queue: AnyFunc[] = [] let to: NodeJS.Timeout return ((...args: Parameters) => new Promise>((ff) => { clearTimeout(to) to = setTimeout(async () => { const res = await fn(...args) for(ff of queue) ff(res) queue.splice(0) }, time) queue.push(ff) })) } export const throttle = (time: number, fn: T) => { let on = true let res: any return (...args: Parameters) => { if(on) { on = false setTimeout(() => on = true, time) res = fn(...args) } return res } } export const wait = (time: number) => new QPromise( (ff) => setTimeout(ff, time), (timeout: any) => clearTimeout(timeout) )