簡體   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