繁体   English   中英

如何等到 function 返回值 flutter

[英]How to wait till function returns value flutter

我有一个 function,它从 SQFlite 数据库中获取 object,id,

    var unit =  await getUnitById(1);

function 看起来像这样

Units getUnitById(int svrId) {
  db.initializeDatabase();
  Future<Units> unit = db.getUnitsBySvrId(1);
  unit.then((value) {
    print(value);
  });  
}

数据库助手 (db) 中的 function 如下所示:

Future<Units> getUnitsBySvrId(int svrId) async {
if (svrId != null) {
  var unitsMapList = await getUnitMapListById(svrId);
  return Units.fromMapObject(unitsMapList[0]);
} else
  return null;
}

查询执行如下所示:

Future<List<Map<String, dynamic>>> getUnitMapListById(int id) async {
  Database db = await this.database;
  // var result = await db.rawQuery('SELECT * FROM $DOG_TABLE order by $ID ASC');
  var result =
    await db.rawQuery('SELECT * FROM $UNIT_TABLE WHERE $SERVER_ID = $id');
  return result;
}

我需要获取单位 object 并使用它,但是当我调用 function 时,它会等待并执行下面的代码,单位是 null,所以我的任务失败了。 我需要等到我从数据库中获取数据。

我怎样才能做到这一点?
我对使用这个 async/await 感到很困惑。

尝试

Units getUnitById(int svrId) async {
db.initializeDatabase();
var unit =await db.getUnitsBySvrId(1);
return unit;
}

我希望它能解决你的问题

你可以像这样包装整个代码,

Future<Units> getUnitById(int svrId) async {
    Completer<Units> completer = Completer();

    // If this line return future,like just below, we have to wait it too
    // await db.initializeDatabase(); 
    db.initializeDatabase();

    Units units = await db.getUnitsBySvrId(svrId);

    completer.complete(units);

    return completer.future;
}

然后打电话

var svrId = 1;
var units = await getUnitById(svrId);

可以在没有Completer的情况下编写此方法

Future<Units> getUnitById(int svrId) async {
    // If this line return future,like just below, we have to wait it too
    // await db.initializeDatabase(); 
    db.initializeDatabase();

    Units units = await db.getUnitsBySvrId(svrId);

    return units;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM