Skip to content

异步

Future

Promise 类似

  1. 使用 then() 进行异步执行,使用 catchError() 捕获异常
dart
HttpRequest.getString(url).then((String result) {
  print(result);
}).catchError((e) {
  // Handle or ignore the error.
});
  1. 可以使用 asyncawait 实现同步执行
dart
void runUsingAsyncAwait() async {
    var entryPoint = await findEntryPoint();
    try {
      var exitCode = await runExecutable(entryPoint, args);
      await flushThenExit(exitCode);
    } catch (e) {
      // Handle the error...
    }
}

等待多个 Future 完成

dart
Future<void> deleteLotsOfFiles() async =>  ...
Future<void> copyLotsOfFiles() async =>  ...
Future<void> checksumLotsOfOtherFiles() async =>  ...

await Future.wait([
  deleteLotsOfFiles(),
  copyLotsOfFiles(),
  checksumLotsOfOtherFiles(),
]);

Stream

  1. 使用 listen() 方法来订阅异步返回的多个数据
dart
// 搜索一个文件或目录
final startingDir = Directory(searchPath);
startingDir.list().listen((entity) {
  if (entity is File) {
    searchFile(entity, searchTerms);
  }
});
  1. 使用 await for
dart
final startingDir = Directory(searchPath);
await for (final entity in startingDir.list()) {
  if (entity is File) {
    searchFile(entity, searchTerms);
  }
}