[英]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.