将回调转换为期货

Dart 有一个强大的异步库,包括 FutureStream 等。但是,有时你可能遇到使用回调而不是 Futures 的异步 API。为了弥补回调和期货之间的差距,Dart 提供了 Completer 类。你可以使用 Completer 将回调转换为 Future。

完成程序非常适合使用基于 Future 的 API 桥接基于回调的 API。例如,假设你的数据库驱动程序不使用 Futures,但你需要返回 Future。试试这段代码:

  // A good use of a Completer.

  Future doStuff() {
    Completer completer = new Completer();
    runDatabaseQuery(sql, (results) {
      completer.complete(results);
    });
    return completer.future;
  }

如果你使用的 API 已经返回 Future,则无需使用 Completer。