Класс Zone
Область представляет собой среду, которая остается стабильной в асинхронных вызовах.
Код всегда выполняется в контексте области, доступной как Zone.current. Исходная main функция выполняется в контексте по умолчанию (Zone.root). Код может выполняться в другой области, используя либо runZoned для создания новой области, либо Zone.run для выполнения кода в контексте существующей области, созданной ранее с помощью Zone.fork.
Разработчики могут создать новую область, которая переопределяет часть функциональности существующей области. Например, пользовательские области могут заменить или изменить поведение print, таймеров, микрозадач или обработки необработанных ошибок.
Класс Zone не поддерживает наследование, но пользователи могут предоставить пользовательские области, разделив существующую область (обычно Zone.current) с помощью ZoneSpecification. Это похоже на создание нового класса, который расширяет базовый Zone класс и переопределяет некоторые методы, но без фактического создания нового класса. Вместо этого переопределяющие методы предоставляются в виде функций, которые явно принимают эквивалент своего собственного класса, класса «предок» и объект this.
Асинхронные обратные вызовы всегда выполняются в контексте области, где они были запланированы. Это реализуется в два этапа:
- сначала обратный вызов регистрируется с помощью одной из функций registerCallback, registerUnaryCallback или registerBinaryCallback. Это позволяет области записывать существование обратного вызова и потенциально изменять его (возвращая другой обратный вызов). Код, выполняющий регистрацию (например,
Future.then), также запоминает текущую область, чтобы позже мог выполнить обратный вызов в этой области. - В какой-то момент зарегистрированный обратный вызов выполняется в запомненной области, используя одну из функций run, runUnary или runBinary.
Все это обрабатывается внутренним кодом платформы, и большинству пользователей об этом не нужно беспокоиться. Однако разработчики новых асинхронных операций, предоставляемых основной системой, должны соблюдать протокол совместимости с областями.
Для удобства, области предоставляют bindCallback (и соответствующие bindUnaryCallback и bindBinaryCallback), чтобы легче соблюдать контракт области: эти функции сначала вызывают соответствующие register функции, а затем оборачивают возвращённую функцию, чтобы она выполнялась в текущей области при её последующем асинхронном вызове.
Аналогично, области предоставляют bindCallbackGuarded (и соответствующие bindUnaryCallbackGuarded и bindBinaryCallbackGuarded), когда обратный вызов должен вызываться через Zone.runGuarded.
Свойства
- errorZone → Zone только для чтения
- Область ошибок отвечает за обработку необработанных ошибок.
- hashCode → int только для чтения, унаследованное
- Код хэша этого объекта.
- parent → Zone? только для чтения
- Родительская область этой области.
- runtimeType → Type только для чтения, унаследованное
- Представление типа объекта во время выполнения.
Методы
- bindBinaryCallback<
R, T1, T2>( R callback(T1 argument1, T2 argument2)) → ZoneBinaryCallback< R, T1, T2> - Регистрирует предоставленный
callbackи возвращает функцию, которая будет выполняться в этой области. - bindBinaryCallbackGuarded<
T1, T2>( void callback(T1 argument1, T2 argument2)) → void Function(T1, T2) - Регистрирует предоставленный
callbackи возвращает функцию, которая будет выполняться в этой области. - bindCallback<
R>( R callback()) → ZoneCallback< R> - Регистрирует предоставленный
callbackи возвращает функцию, которая будет выполняться в этой области. - bindCallbackGuarded(
void callback()) → void Function() - Регистрирует предоставленный
callbackи возвращает функцию, которая будет выполняться в этой области. - bindUnaryCallback<
R, T>( R callback(T argument)) → ZoneUnaryCallback< R, T> - Регистрирует предоставленный
callbackи возвращает функцию, которая будет выполняться в этой области. - bindUnaryCallbackGuarded<
T>( void callback(T argument)) → void Function(T) - Регистрирует предоставленный
callbackи возвращает функцию, которая будет выполняться в этой области. - createPeriodicTimer(
Duration period, void callback(Timer timer)) → Timer - Создаёт периодический Timer, где обратный вызов выполняется в этой области.
- createTimer(
Duration duration, void callback()) → Timer - Создаёт Timer, где обратный вызов выполняется в этой области.
- errorCallback(
Object error, StackTrace? stackTrace) → AsyncError? - Перехватывает ошибки, добавленные программно в Future или Stream.
- fork(
{ZoneSpecification? specification, Map< Object?, Object?>? zoneValues}) → Zone - Создаёт новую область в качестве дочерней области этой области.
- handleUncaughtError(
Object error, StackTrace stackTrace) → void - Обрабатывает необработанные асинхронные ошибки.
- inSameErrorZone(
Zone otherZone) → bool - Является ли эта область и
otherZoneв одной области ошибок. - noSuchMethod(
Invocation invocation) → dynamic inherited - Вызывается при обращении к несуществующему методу или свойству.
- 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<
T1, T2>( void action(T1 argument1, T2 argument2), T1 argument1, T2 argument2) → void - Выполняет заданную
actionсargument1иargument2в этой области и перехватывает синхронные ошибки. - runGuarded(
void action()) → void - Выполняет заданную
actionв этой области и перехватывает синхронные ошибки. - runUnary<
R, T>( R action(T argument), T argument) → R - Выполняет заданную
actionсargumentв этой области. - runUnaryGuarded<
T>( void action(T argument), T argument) → void - Выполняет заданную
actionсargumentв этой области и перехватывает синхронные ошибки. - scheduleMicrotask(
void callback()) → void - Асинхронно выполняет
callbackв этой области. - toString(
) → String inherited - Строковое представление этого объекта.
Операторы
- operator ==(
Object other) → bool inherited - Оператор равенства.
- operator [](
Object? key) → dynamic - Извлекает значение зоны, связанное с
key.
Статические свойства
- current → Zone только для чтения
- Активная зона в данный момент.
Константы
- root → const Zone
- Корневая зона.
_rootZone
© 2012 the Dart project authors
Licensed under the BSD 3-Clause "New" or "Revised" License.
https://api.dart.dev/stable/2.18.5/dart-async/Zone-class.html