You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Future<List<Books>>与Future<List<Future<Books>>>差异及函数修改方案

Future<List> 与 Future<List<Future>> 的差异及函数修改方案

两者核心差异

  • Future<List>:异步操作完成后直接返回已解析完成的Books对象列表,await后可直接使用列表中的实体对象,无需额外处理异步逻辑。
  • Future<List<Future>>:异步操作完成后返回的列表中每个元素仍是未完成的异步任务,需要对列表内每个元素单独await才能获取实际的Books对象,增加了代码复杂度和出错概率。

修改searchBook函数的实现方案

当前代码中,appDb.books.mapFromRow返回的是Future<Books>,导致map后的结果为List<Future<Books>>,最终函数返回Future<List<Future<Books>>>。可通过Future.wait()等待所有异步任务完成来修正返回类型:

Future<List<Books>> searchBook(String searchString) async {
  // 获取包含异步任务的列表
  final bookFutures = appDb.customSelect(
    'SELECT * FROM books',
    readsFrom: {appDb.books},
  ).map(appDb.books.mapFromRow).get();
  
  // 等待所有异步任务完成,返回已解析的Books列表
  return await Future.wait(bookFutures);
}

补充说明

如果mapFromRow方法可以修改为同步返回Books(而非Future<Books>),则代码可简化为:

Future<List<Books>> searchBook(String searchString) async {
  return await appDb.customSelect(
    'SELECT * FROM books',
    readsFrom: {appDb.books},
  ).map(appDb.books.mapFromRow).get();
}

但根据当前函数的返回类型推断,mapFromRow应为异步方法,因此优先采用Future.wait()的方案。

内容的提问来源于stack exchange,提问作者user33629

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 15:38:31