dart:async library

支持诸如Future和Stream之类的异步编程.

了解FutureStream是编写任何Dart程序的先决条件.

要在您的代码中使用此库:

import 'dart:async';

Future

Future对象表示其返回值可能尚不可用的计算. 当将来某个时候完成时,Future返回计算的值. 期货通常用于潜在的冗长计算,例如I / O和与用户的交互.

执行任务时,Dart库中的许多方法都会返回Future. 例如,当将HttpServer绑定到主机和端口时, bind()方法将返回Future.

 HttpServer.bind('127.0.0.1', 4444)
     .then((server) => print('${server.isBroadcast}'))
     .catchError(print);

Future.then注册一个回调函数,该函数在Future的操作(在本例中为bind()方法bind()成功完成时运行. 该操作返回的值将传递到回调函数中. 在此示例中, bind()方法返回HttpServer对象. 回调函数将打印其属性之一. Future.catchError注册一个回调函数,如果在Future中发生错误,该函数将运行.

Stream

流提供异步的数据序列. 数据序列的示例包括单个事件(例如鼠标单击)或较大数据的顺序块(例如带有文件内容的多个字节列表,例如鼠标单击)以及从文件读取的字节列表流. 以下示例打开一个文件以供读取. Stream.listen注册一个回调函数,该函数在每次有更多数据可用时运行.

Stream<List<int>> stream = new File('quotes.txt').openRead();
stream.transform(utf8.decoder).listen(print);

该流发出一系列字节列表. 程序必须解释字节或处理原始字节数据. 在这里,代码使用UTF-8解码器(在dart:convert库中提供)将字节序列转换为Dart字符串序列.

流的另一种常见用法是用于Web应用程序中用户生成的事件:以下代码侦听按钮上的鼠标单击.

querySelector('#myButton').onClick.listen((_) => print('Click.'));

Other resources

Classes

Completer<T>
产生Future对象并稍后用值或错误完成它们的一种方法. [...]
DeferredLibrary
表示推迟加载libraryName . [...]
EventSink<T>
一个支持添加错误的接收器 . [...]
Future<T>
表示延迟计算的对象. [...]
FutureOr<T>
一种类型,表示Future<T>T . [...]
Stream<T>
异步数据事件的源. [...]
StreamConsumer<S>
接收多个完整流的"接收器"的抽象接口. [...]
StreamController<T>
具有其控制的流的控制器. [...]
StreamIterator<T>
An Iterator like interface for the values of a Stream. [...]
StreamSink<S>
一个对象,可以同步和异步地接收流事件. [...]
StreamSubscription<T>
订阅Stream中的事件. [...]
StreamTransformer<S, T>
转换流. [...]
StreamTransformerBase<S, T>
实现StreamTransformer的基类. [...]
StreamView<T>
仅公开Stream接口的包装器.
SynchronousStreamController<T>
流控制器,可同步传递事件. [...]
Timer
倒数计时器可以配置为触发一次或重复触发. [...]
Zone
区域表示在异步调用之间保持稳定的环境. [...]
ZoneDelegate
父区域的适应视图. [...]
ZoneSpecification
此类提供叉状区域的规范. [...]

Functions

runZoned<R>(R body(), {Map zoneValues, ZoneSpecification zoneSpecification, Function onError}) → R
在自己的区域中运行body . [...]
runZonedGuarded<R>(R body(), void onError(Object error, StackTrace stack), {Map zoneValues, ZoneSpecification zoneSpecification}) → R
在其自身的错误区域中运行body . [...]
@Since(" 2.8")
scheduleMicrotask(void callback()) → void
异步运行一个函数. [...]

Typedefs

ControllerCallback() → void
流控制器的onListenonPauseonResume回调的类型.
ControllerCancelCallback() → dynamic
流控制器onCancel回调的类型. [...]
CreatePeriodicTimerHandler(Zone self, ZoneDelegate parent, Zone zone, Duration period, void f(Timer timer)) Timer
CreateTimerHandler(Zone self, ZoneDelegate parent, Zone zone, Duration duration, void f()) Timer
ErrorCallbackHandler(Zone self, ZoneDelegate parent, Zone zone, Object error, StackTrace stackTrace) AsyncError
ForkHandler(Zone self, ZoneDelegate parent, Zone zone, ZoneSpecification specification, Map zoneValues) Zone
HandleUncaughtErrorHandler(Zone self, ZoneDelegate parent, Zone zone, Object error, StackTrace stackTrace) → void
PrintHandler(Zone self, ZoneDelegate parent, Zone zone, String line) → void
RegisterBinaryCallbackHandler(Zone self, ZoneDelegate parent, Zone zone, R f(T1 arg1, T2 arg2)) ZoneBinaryCallback<R, T1, T2>
RegisterCallbackHandler(Zone self, ZoneDelegate parent, Zone zone, R f()) ZoneCallback<R>
RegisterUnaryCallbackHandler(Zone self, ZoneDelegate parent, Zone zone, R f(T arg)) ZoneUnaryCallback<R, T>
RunBinaryHandler(Zone self, ZoneDelegate parent, Zone zone, R f(T1 arg1, T2 arg2), T1 arg1, T2 arg2) → R
RunHandler(Zone self, ZoneDelegate parent, Zone zone, R f()) → R
RunUnaryHandler(Zone self, ZoneDelegate parent, Zone zone, R f(T arg), T arg) → R
ScheduleMicrotaskHandler(Zone self, ZoneDelegate parent, Zone zone, void f()) → void
ZoneBinaryCallback<R, T1, T2>(T1 arg1, T2 arg2) → R
ZoneCallback<R>() → R
ZoneUnaryCallback<R, T>(T arg) → R

Exceptions / Errors

AsyncError
对错误和堆栈跟踪. 由Zone.errorCallback返回.
DeferredLoadException
当延迟的库无法加载时抛出.
TimeoutException
在等待异步结果时发生计划的超时时抛出.