const promiseMap<key, Promise<any>> = new Map(); async function keyedDebounce<R>(key: string, fn: () => R) { const existingPromise = promiseMap.get(key); if (existingPromise) return existingPromise; const promise = fn().then(result => { promiseMap.delete(key); return result; }); promiseMap.set(key, promise); return promise; }