我使用postgres数据库查询来确定我的下一个操作.我需要等待结果才能执行下一行代码.现在我conn.query返回一个Future,但是当我将代码放在另一个函数中时,我无法将其设置为异步.
main() {
// get the database connection string from the settings.ini in the project root folder
db = getdb();
geturl().then((String url) => print(url));
}
Future geturl() {
connect(db).then((conn) {
conn.query("select trim(url) from crawler.crawls where content IS NULL").toList()
.then((result) { return result[0].toString(); })
.catchError((err) => print('Query error: $err'))
.whenComplete(() {
conn.close();
});
});
}
Run Code Online (Sandbox Code Playgroud)
我只是想geturl()等待返回的值,但无论我做什么; 它会立即发射.任何人都能指出我的一篇文档解释了我在这里缺少的东西吗?
你目前还没有真正回归未来geturl.您必须实际返回您使用的期货:
Future geturl() {
return connect(db).then((conn) {
return conn.query("select trim(url) from crawler.crawls where content IS NULL").toList()
.then((result) { return result[0].toString(); })
.catchError((err) => print('Query error: $err'))
.whenComplete(() {
conn.close();
});
});
}
Run Code Online (Sandbox Code Playgroud)
要详细说明John的评论,以下是使用async/await实现这一点的方法.(在Dart 1.9中添加了async/await功能)
main() async {
try {
var url = await getUrl();
print(url);
} on Exception catch (ex) {
print('Query error: $ex');
}
}
Future getUrl() async {
// get the database connection string from the settings.ini in the project root folder
db = getdb();
var conn = await connect(db);
try {
var sql = "select trim(url) from crawler.crawls where content IS NULL";
var result = await conn.query(sql).toList();
return result[0].toString();
} finally {
conn.close();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10190 次 |
| 最近记录: |