如何等待函数返回值flutter



我有一个函数,它从id为的SQFlite数据库中获取对象

var unit =  await getUnitById(1);

功能看起来像这个

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

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

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;
}

我需要获取Units对象并使用它,但当我调用函数时,它会等待并执行下面的代码,并且unit为null,所以我的任务失败了。我需要等到我从数据库得到数据。

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

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

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;
}

尝试

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

我希望它能解决你的问题

最新更新