Skip to content

Instantly share code, notes, and snippets.

@arturovt
Last active July 27, 2019 16:30
Show Gist options
  • Save arturovt/94f22d759701357f5d40b4a0a20e0d19 to your computer and use it in GitHub Desktop.
Save arturovt/94f22d759701357f5d40b4a0a20e0d19 to your computer and use it in GitHub Desktop.
interface Zone {
/**
* Родительская зона
*/
parent: Zone;
/**
* Название зоны (используется для дебагинга)
*/
name: string;
/**
* Возвращает значение ассоциированное с ключом
*
* Если в свойствах текущей зоны нет такого ключа, то зона будет искать в родителе
*/
get(key: string): any;
/**
* Если у нас несколько зон, то мы можем искать нужную нам зону через ключ,
* который мы можем определить в `properties`, этот метод работает рекурсивно
*/
getZoneWith(key: string): Zone;
/**
* Используется для создания дочерней зоны
*/
fork(zoneSpec: ZoneSpec): Zone;
/**
* Оборачивает колбек в новую функцию, которая восстановит текущую зону после вызова
*/
wrap<F extends Function>(callback: F, source: string): F;
/**
* Вызывает колбек в нужной зоне
*/
run<T>(callback: Function, applyThis?: any, applyArgs?: any[], source?: string): T;
/**
* Вызывает колбек в нужной зоне в `try-catch`
*/
runGuarded<T>(callback: Function, applyThis?: any, applyArgs?: any[], source?: string): T;
/**
* Вызывает таск в нужной зоне (о тасках позже)
*/
runTask(task: Task, applyThis?: any, applyArgs?: any[]): any;
/**
* Запланировать микротаск
*/
scheduleMicroTask(
source: string,
callback: Function,
data?: TaskData,
customSchedule?: (task: Task) => void
): MicroTask;
/**
* Запланировать макротаск
*/
scheduleMacroTask(
source: string,
callback: Function,
data?: TaskData,
customSchedule?: (task: Task) => void,
customCancel?: (task: Task) => void
): MacroTask;
/**
* Запланировать событийный таск
*/
scheduleEventTask(
source: string,
callback: Function,
data?: TaskData,
customSchedule?: (task: Task) => void,
customCancel?: (task: Task) => void
): EventTask;
/**
* Запланировать существующий таск
*/
scheduleTask<T extends Task>(task: T): T;
/**
* Позволяет зоне перехватить таск, который отменили
*/
cancelTask(task: Task): any;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment