export const debouncing = async (time: number = 1000) => { return new Promise((resolve, reject) => { const timerId = setTimeout(() => { resolve(true) }, time) const listener = (event: any) => { if (event.detail === timerId) { return } clearTimeout(timerId) reject(new Error('locked!!!' + timerId)) document.removeEventListener('debiuncing.clean', listener); } document.addEventListener('debiuncing.clean', listener) const event = new CustomEvent('debiuncing.clean', { detail: timerId }); document.dispatchEvent(event); }) }