我正在尝试使用 sqljocky 同步查询 MySQL 数据库。我有一个Load
运行查询并获取数据然后将数据导入到User
目的。我遇到的问题是运行查询的 Future 没有及时返回以将对象返回到调用方法。
DataObject user = new DataObject();
user.Get(1234);
// I cannot do anything here because the returned object is null
user.somethingElse();
DataObject Get(String ID){
return access.Load(this, ID);
}
// Runs query
Load(DataObject object, String ID){
// Set up query
String query = 'select * from users where ID = \'' + ID + '\'';
// Run query
var completer = new Completer.sync();
pool.query(query).then((result) {
result.listen((row) {
// Import into object
object.Import(row);
}, onDone: () {
completer.complete(object);
});
});
}
我的猜测是你想做这样的事情(注意未经测试的代码):
Future<DBObject> load(DBObject object, String id) {
var query = "select ... where id='$id'"; // Note: check for SQL injection.
return pool.query(query)
.then((result) => result.toList())
.then((list) => list.forEach((row) => object.import(row)))
.then((_) => object);
}
你读过这篇文章吗article关于使用期货?
关键点是,如果一个方法是异步的,并且调用代码需要等待它完成,那么它必须返回一个 Future 对象(或者在某些情况下返回一个 Stream)。 Dart 中没有办法让函数“阻塞”等待异步结果。请随意在评论中提出更多问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)