简单来说:
await旨在中断流程直到异步方法完成。
then但是不会中断处理流程(意味着将执行下一条指令),但是使您可以在异步方法完成后运行代码。
在您的示例中,您无法实现使用时想要的功能,
then因为代码不是“等待中”,并且该
return语句已处理,因此返回一个空列表。
当您添加时
await,您会明确地说:’直到我
Future完成为止(该
then部分),再继续。
您可以按照以下方式编写代码,以仅通过以下方式获得相同的结果
await:
Future<List<Expense>> getExpensesByFundId(int fundId) async { Database db = await database; List<Expense> expenseList = List(); List<Map<String,dynamic>> expList = await db.query(expTable,where: '$expTable.$expFundId = $fundId'); expList.forEach((Map<String, dynamic> expMap) { expenseList.add(Expense.fromMap(expMap)); }); return expenseList;}您也可以选择仅使用该
then部分,但是需要确保
getExpensesByFundId随后正确调用:
Future<List<Expense>> getExpensesByFundId(int fundId) async { Database db = await database; List<Expense> expenseList = List(); return db.query(expTable,where: '$expTable.$expFundId = $fundId') .then((List<Map<String,dynamic>> expList){ expList.forEach((Map<String, dynamic> expMap){ expenseList.add(Expense.fromMap(expMap)); }); });}// call either with an awaitList<Expense> list = await getExpensesByFundId(1);// or with a then (knowing that this will not interrupt the process flow and process the next instructiongetExpensesByFundId(1).then((List<Expense> l) { });


