function debounce(fn, delay = 300) {
let timer;
let resolveList = []; // 存放多次调用的 resolve
return function (...args) {
if (timer) clearTimeout(timer);
return new Promise((resolve) => {
resolveList.push(resolve);
timer = setTimeout(() => {
const result = fn.apply(this, args);
// 所有等待的 promise 一起 resolve
resolveList.forEach(r => r(result));
resolveList = [];
}, delay);
});
}
}
// 使用示例
const debounceTest = debounce((x) => {
console.log("执行 fn:", x);
return x * 2; // 假设返回结果
}, 500);
(async () => {
console.log(await debounceTest(1));
console.log(await debounceTest(2));
console.log(await debounceTest(3)); // 只会执行一次 fn,打印 "执行 fn: 3",并返回 6
})();
function thrrow(fn,delay=300) {
let last = 0;
return function (...args) {
let now = Date.now()
if(now - last > delay) {
fn.apply(this,args)
last = now
}
}
}
const thrrowTest = thrrow((...args)=> {
console.log(...args)
})
thrrowTest(1,2)
thrrowTest(3,4)
thrrowTest(5,6)
console