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的示例代码
如果可能的话,我希望有人向我解释为什么在 pool.query 之外创建了一个完成器对象的函数然后调用了一个函数 completer.complete(null)。
简而言之,我无法理解打印执行后的部分。
注意:如果可能的话,我还想知道 future 和 Completer 如何用于 DB 和非 DB 操作的实际用途。
我探索了以下链接: Google groups Discussion on Future and Completer
和下面给出的 api 参考文档 Completer api 参考和Future api 参考