gpt4 book ai didi

dart - Dart 中的完成者和 future ?

转载 作者:行者123 更新时间:2023-12-02 20:52:28 27 4
gpt4 key购买 nike

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)。

简而言之,我无法理解 print 执行后的部分。

注意:如果可能的话,我还想知道 future 和 Completer 如何用于数据库和非数据库操作的实际目的。

我探索了以下链接: Google groups discussion on Future and Completer

以及api引用文档如下所示 Completer api referenceFuture api Reference

最佳答案

从某种意义上说,该方法返回的 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 - Dart 中的完成者和 future ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13732473/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com