flutter - 等待多个级别的 future ?

标签 flutter dart async-await future readability

我有一个 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/

相关文章:

firebase - 如何使 FirebaseFunctions.instance.httpsCallable() 通过 Authorization header ? (使用 flutter )

javascript - 为 Flutter Web 应用添加 id 或 name 属性或其他标识方式?

json - dartdocgen:如何在本地查看文档

android - Flutter speech_recognition locale de_DE 不工作

c# - volatile IEnlistmentNotification 和 TransactionScope.AsyncFlowEnabled = true

Flutter 获取真正的设备方向

Flutter - PageController 错误 : `Page value is only available after content dimensions are established.`

arrays - JSON http.get返回áflutter

javascript - 在解析 "await Promise"之前输入 Catch block

javascript - Node.js mongodb 驱动程序异步/等待查询