Future readData() {
    var completer = new Completer();
    print("querying");
    pool.query('select p.id, p.name, p.age, t.name, t.species '
        'from people p '
        'left join pets t on t.owner_id = p.id').then((result) {
      print("got results");
      for (var row in result) {
        if (row[3] == null) {
          print("ID: ${row[0]}, Name: ${row[1]}, Age: ${row[2]}, No Pets");
        } else {
          print("ID: ${row[0]}, Name: ${row[1]}, Age: ${row[2]}, Pet Name: ${row[3]},     Pet Species ${row[4]}");
        }
      }
      completer.complete(null);
    });
    return completer.future;
  }

以上是取自github SQLJocky Connector的示例代码

如果可能的话,我希望有人向我解释一下,为什么在池之外创建了完成器对象的函数是这样的.查询然后调用一个函数Completer.Complete(NULL).

简而言之,在打印执行后,我无法理解该部分.

Note:Kindly if possible I would also like to know how is future and Completer used for practical purpose both for DB and non DB operations.

我浏览了以下链接: Google groups discussion on Future and Completer

以及api参考文档,如下所示

推荐答案

从某种意义上说,该方法返回的future 对象连接到该补足符对象,该补足符对象将在"future "的某个时刻完成.这个complete()方法在Completer上被调用,它向future 发出完成的信号.下面是一个更简单的例子:

Future<String> someFutureResult(){
   final c = new Completer();
   // complete will be called in 3 seconds by the timer.
   new Timer(3000, (_) => c.complete("you should see me second"));
   return c.future;
}

main(){
   someFutureResult().then((String result) => print('$result'));
   print("you should see me first");
}

这是link to a blog post which details other scenarios where futures are helpful美元

Dart相关问答推荐

如何找到这个Currate函数的返回类型?

Dart 中的const关键字放置有什么不同?

I/flutter (22027):MissingPluginException(在通道 plugins.flutter.io/cloud_firestore 上找不到方法 DocumentReference#setData 的实现)

Flutter Web:无法用鼠标向下滚动(drag)(Flutter 2.5+)

什么时候在 Dart 中使用interfaces接口?

跳过 JavaScript 直接进入 Dart

Dart:Streams与 ValueNotifiers

摆动中的可滚动导轨

Flutter url_launcher 未在发布模式下启动 url

Flatter BLoC-如何将参数传递给事件?

如何更改手机屏幕上的Flutter应用程序名称显示?

在 Flutter 的 TextFormField 中管理事件

Flutter – 连续两个文本,左边一个溢出

如何在 Dart 中上传文件?

为什么 Dart 有编译时常量?

Dart 有小部件库吗?

如何将任意数据从 Dart polymer Web 组件传递到单击事件处理函数

如何在抽象类中声明工厂构造函数?

什么是健全的编程语言?

如何在 Dart 中获取文件名?