SOURCE

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 命令行工具 X clear

                    
>
console