Index: sdk/lib/async/async.dart |
diff --git a/sdk/lib/async/async.dart b/sdk/lib/async/async.dart |
index a565220cfdcd622d992893d37cdffcd7ad0df809..b8d5eb0fb4c0bb7258125324a4bbd1cdeaa073cc 100644 |
--- a/sdk/lib/async/async.dart |
+++ b/sdk/lib/async/async.dart |
@@ -6,14 +6,71 @@ |
* Support for asynchronous programming, |
* with classes such as Future and Stream. |
* |
- * For an introduction to asynchronous programming in Dart, see the |
- * [dart:async section of the language tour] |
- * (https://www.dartlang.org/docs/dart-up-and-running/contents/ch03.html#ch03-asynchronous-programming). |
+ * Understanding [Future]s and [Stream]s is a prerequisite for |
+ * writing just about any Dart program. |
+ * |
+ * To use this library in your code: |
+ * |
+ * import 'dart:async'; |
+ * |
+ * ## Future |
+ * |
+ * A Future object represents a computation whose return value |
+ * might not yet be available. |
+ * The Future returns the value of the computation |
+ * when it completes at some time in the future. |
+ * Futures are often used for potentially lengthy computations |
+ * such as I/O and interaction with users. |
+ * |
+ * Many methods in the Dart libraries return Futures when |
+ * performing tasks. For example, when binding an HttpServer |
+ * to a host and port, the `bind()` method returns a Future. |
+ * |
+ * HttpServer.bind('127.0.0.1', 4444) |
+ * .then((server) => print('${server.isBroadcast}')) |
+ * .catchError(print); |
+ * |
+ * [Future.then] registers a callback function that runs |
+ * when the Future's operation, in this case the `bind()` method, |
+ * completes successfully. |
+ * The value returned by the operation |
+ * is passed into the callback function. |
+ * In this example, the `bind()` method returns the HttpServer |
+ * object. The callback function prints one of its properties. |
+ * [Future.catchError] registers a callback function that |
+ * runs if an error occurs within the Future. |
+ * |
+ * ## Stream |
+ * |
+ * A Stream provides an asynchronous sequence of data. |
+ * Examples of data sequences include user-generated events, |
+ * such as mouse clicks, and a stream of bytes read from a file. |
+ * The following example opens a file for reading. |
+ * [Stream.listen] registers a callback function that runs |
+ * each time more data is available. |
+ * |
+ * Stream<List<int>> stream = new File('quotes.txt').openRead(); |
+ * stream.transform(UTF8.decoder).listen(print); |
+ * |
+ * The stream emits a sequence of a list of bytes. |
+ * The program must interpret the bytes or handle the raw byte data. |
+ * Here, the code uses a UTF8 decoder (provided in the `dart:convert` library) |
+ * to convert the sequence of bytes into a sequence |
+ * of Dart strings. |
+ * |
+ * Another common use of streams is for user-generated events |
+ * in a web app: The following code listens for mouse clicks on a button. |
+ * |
+ * querySelector('#myButton').onClick.listen((_) => print('Click.')); |
* |
* ## Other resources |
* |
- * * [Using Future Based APIs] |
- * (https://www.dartlang.org/articles/using-future-based-apis/): A first look at |
+ * * The [dart:async section of the library tour] |
+ * (https://www.dartlang.org/docs/dart-up-and-running/contents/ch03.html#ch03-asynchronous-programming): |
+ * A brief overview of asynchronous programming. |
+ * |
+ * * [Use Future-Based APIs] |
+ * (https://www.dartlang.org/docs/tutorials/futures/): A closer look at |
* Futures and how to use them to write asynchronous Dart code. |
* |
* * [Futures and Error Handling] |