Класс Zone
Зона представляет среду, которая остается неизменной при асинхронных вызовах.
Весь код выполняется в контексте зоны, доступной коду как Zone.current. Начальная функция main выполняется в контексте зоны по умолчанию (Zone.root). Код можно выполнять в другой зоне, используя runZoned или runZonedGuarded, чтобы создать новую зону и выполнить код в ней, либо Zone.run, чтобы выполнить код в контексте существующей зоны, которая могла быть создана ранее с помощью Zone.fork.
Разработчики могут создавать новые зоны, переопределяющие некоторые функции существующей зоны. Например, пользовательские зоны могут заменять или изменять поведение print, таймеров, микрозадач или способ обработки неперехваченных ошибок.
Класс Zone нельзя наследовать, но пользователи могут создавать пользовательские зоны, разветвляя существующую зону (обычно Zone.current) с помощью ZoneSpecification. Это похоже на создание нового класса, расширяющего базовый класс Zone и переопределяющего некоторые методы, но без фактического создания нового класса. Вместо этого переопределяющие методы задаются как функции, которым явно передаются эквиваленты их собственного класса, класса «super» и объекта 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 унаследовано - Вызывается при обращении к несуществующему методу или свойству.
- 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 унаследовано - Строковое представление этого объекта.
Операторы
- operator ==(
Object other) → bool унаследовано - Оператор равенства.
- 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.19.6/dart-async/Zone-class.html