我有一个 SQFlite
Database
的单例实例的 getter,如下所示:
static Database _db;
static Future<Database> get db async {
if( _db == null )
_db = await openOrCreateDatabase();
return _db;
}
现在,我想对 db
执行查询:
final List<Map<String, dynamic>> rows = await (await db).query(
'mytable',
where: 'id<?',
whereArgs: [10]
);
我发现 await (await db)
很难看 - 是否有更好的方法将两个 await
串行“链接”在一起?
最佳答案
因为这两个操作都返回一个 Future,所以没有其他方法可以等待这两个操作。要使用单个 await 等待多个 futures,您需要将其添加到 futures 列表中,然后使用 Future.wait 但在这种情况下通常更丑陋且无用。
var futures = <Future>[];
futures.add(operationThatReturnAFuture());
futures.add(operationThatReturnAFuture());
await Future.wait(futures);
Dart 不支持等待之间的这种链接,但我知道在这种情况下看起来很奇怪。
也许如果您将变量行更改为方法,代码看起来会更清晰一些。
例如:
getUser(int id) async {
final db = await database;
var res = await db.query("User", where: "id = ?", whereArgs: [id]);
return res.isNotEmpty ? User.fromMap(res.first) : Null ;
}
关于flutter - 等待多个级别的 future ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56611510/