Класс Zone
Область представляет среду, остающуюся стабильной во время асинхронных вызовов.
Код всегда выполняется в контексте области, доступной как Zone.current. Изначальная main функция выполняется в контексте по умолчанию (область Zone.ROOT). Код может быть выполнен в другой области, используя runZoned для создания новой области или Zone.run для выполнения кода в контексте существующей области, вероятно, созданной с помощью Zone.fork.
Разработчики могут создать новую область, которая переопределяет некоторые функции существующей области. Например, пользовательские области могут заменить или изменить поведение print, таймеров, микрозадач или обработки необработанных ошибок.
Класс Zone не может быть подклассом, но пользователи могут предоставить пользовательские области, разделив существующую область (обычно Zone.current) с помощью ZoneSpecification. Это похоже на создание нового класса, который расширяет базовый Zone класс и переопределяет некоторые методы, но без фактического создания нового класса. Вместо этого переопределяющие методы предоставляются как функции, которые явно принимают эквивалент своего собственного класса, класса "super" и объекта this в качестве параметров.
Асинхронные обратные вызовы всегда выполняются в контексте области, где они были запланированы. Это реализуется в два шага:
- обратный вызов сначала регистрируется с помощью одной из функций registerCallback, registerUnaryCallback или registerBinaryCallback. Это позволяет области записывать существование обратного вызова и потенциально изменять его (возвращая другой обратный вызов). Код, выполняющий регистрацию (например,
Future.then), также запоминает текущую область, чтобы затем мог выполнить обратный вызов в этой области. - В какой-то момент зарегистрированный обратный вызов выполняется в сохранённой области.
Все это обрабатывается кодом платформы, и большинство пользователей не должны об этом беспокоиться. Однако разработчики новых асинхронных операций, предоставляемых базовой системой или через расширения нативных функций, должны следовать протоколу для совместимости с областями.
Для удобства, области предоставляют bindCallback (и соответствующие bindUnaryCallback или bindBinaryCallback), чтобы упростить соблюдение контракта области: эти функции сначала вызывают соответствующие register функции, а затем оборачивают возвращённую функцию таким образом, что она будет выполняться в текущей области, когда она впоследствии будет вызвана асинхронно.
Константы
- ROOT → Zone
-
Корневая область.
_ROOT_ZONE
Статические свойства
- current → Zone только для чтения
-
Текущая активная область.
Свойства
- errorZone → Zone только для чтения
-
Область ошибок отвечает за обработку необработанных ошибок.
- parent → Zone только для чтения
-
Родительская область данной области.
- hashCode → int только для чтения, унаследованное
-
Хеш-код для этого объекта.
- runtimeType → Type только для чтения, унаследованное
-
Представление типа объекта во время выполнения.
Операторы
- operator [](
Object key) → dynamic -
Возвращает значение области, связанное с
key. - operator ==(
other) → bool унаследованное -
Оператор равенства.
Методы
- bindBinaryCallback<R, T1, T2>(
R action(T1 argument1, T2 argument2), { bool runGuarded: true }) → ZoneBinaryCallback<R, T1, T2> -
Эквивалентно:
- bindCallback<R>(
R action(), { bool runGuarded: true }) → ZoneCallback<R> -
Эквивалентно:
- bindUnaryCallback<R, T>(
R action(T argument), { bool runGuarded: true }) → ZoneUnaryCallback<R, T> -
Эквивалентно:
- createPeriodicTimer(
Duration period, void callback(Timer timer)) → Timer -
Создаёт периодический таймер, где обратный вызов выполняется в этой области.
- createTimer(
Duration duration, void callback()) → Timer -
Создаёт таймер, где обратный вызов выполняется в этой области.
- errorCallback(
Object error, StackTrace stackTrace) → AsyncError -
Перехватывает ошибки, когда они добавляются программно в
FutureилиStream. - fork(
{ZoneSpecification specification, Map zoneValues }) → Zone -
Создаёт новую область как дочернюю область
this. - handleUncaughtError<R>(
error, StackTrace stackTrace) → R -
Обрабатывает необработанные асинхронные ошибки.
- inSameErrorZone(
Zone otherZone) → bool -
Возвращает true, если
thisиotherZoneнаходятся в одной области ошибок. - print(
String line) → void -
Выводит на печать заданную
lineстроку. - registerBinaryCallback<R, T1, T2>(
R callback(T1 arg1, T2 arg2)) → ZoneBinaryCallback<R, T1, T2> -
Регистрирует данный обратный вызов в этой области.
- registerCallback<R>(
R callback()) → ZoneCallback<R> -
Регистрирует данный обратный вызов в этой области.
- registerUnaryCallback<R, T>(
R callback(T arg)) → ZoneUnaryCallback<R, T> -
Регистрирует данный обратный вызов в этой области.
- run<R>(
R action()) → R -
Выполняет
actionв этой области. - runBinary<R, T1, T2>(
R action(T1 argument1, T2 argument2), T1 argument1, T2 argument2) → R -
Выполняет заданный
actionсargument1иargument2в этой области. - runBinaryGuarded<R, T1, T2>(
R action(T1 argument1, T2 argument2), T1 argument1, T2 argument2) → R -
Выполняет заданный
actionсargument1иargument2в этой области и перехватывает синхронные ошибки. - runGuarded<R>(
R action()) → R -
Выполняет заданный
actionв этой области и перехватывает синхронные ошибки. - runUnary<R, T>(
R action(T argument), T argument) → R -
Выполняет заданный
actionсargumentв этой области. - runUnaryGuarded<R, T>(
R action(T argument), T argument) → R -
Выполняет заданный
actionсargumentв этой области и перехватывает синхронные ошибки. - scheduleMicrotask(
void action()) → void -
Асинхронно выполняет
actionв этой области. - noSuchMethod(
Invocation invocation) → dynamic унаследованное -
Вызывается, когда обращается к несуществующему методу или свойству.
- toString(
) → String унаследованное -
Возвращает строковое представление этого объекта.
© 2012 the Dart project authors
Licensed under the Creative Commons Attribution-ShareAlike License v4.0.
https://api.dartlang.org/stable/1.24.3/dart-async/Zone-class.html