/
githubmirror
/
gutenberg
Обзор
Документация
Войти
/
githubmirror
/
gutenberg
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
trunk
packages/data/src/utils/emitter.ts
54 строки
1 KB
Manzoor Wani
Convert the emitter module in data package to TS (#66669)
01 ноя 2024, 14:25
Не верифицирован
01 ноя 2024, 14:25
29c8af3
Код
Авторство
О чём код?
export interface DataEmitter { emit: VoidFunction; subscribe: ( listener: VoidFunction ) => VoidFunction; pause: VoidFunction; resume: VoidFunction; isPaused: boolean; } /** * Create an event emitter. * * @return The event emitter. */ export function createEmitter(): DataEmitter { let isPaused = false; let isPending = false; const listeners = new Set< VoidFunction >(); const notifyListeners = () => // We use Array.from to clone the listeners Set // This ensures that we don't run a listener // that was added as a response to another listener. Array.from( listeners ).forEach( ( listener ) => listener() ); return { get isPaused() { return isPaused; }, subscribe( listener ) { listeners.add( listener ); return () => listeners.delete( listener ); }, pause() { isPaused = true; }, resume() { isPaused = false; if ( isPending ) { isPending = false; notifyListeners(); } }, emit() { if ( isPaused ) { isPending = true; return; } notifyListeners(); }, }; }