Flutter/Dart中return未等待async的toList执行完成问题求助
解决Flutter SQFLite异步写入未完成即返回的问题
你当前的问题核心在于:map 里的异步回调会生成一系列 Future 对象,但你只是把这些 Future 收集到列表里,却没有等待所有异步操作执行完毕就返回了,导致数据库写入还在后台运行时,代码就已经走到了 return 'done'。
解决方案:用 Future.wait 等待所有异步任务完成
Future.wait 可以接收一个 Future 列表,等待列表中所有异步操作全部完成后才会继续执行后续代码,正好解决你的问题。修改后的代码如下:
// 生成所有数据库写入的Future并收集到列表 final syncFutures = (response as List).map((tmp) async { print('• API: apiSync - Inserting $type'); await DBProvider.db.updateNews(ArtNews.fromJson(tmp)); }).toList(); // 等待所有异步写入操作完成 await Future.wait(syncFutures); return 'done';
为什么之前的写法无效?
你之前的代码中,map 里的 async 函数会返回 Future,但 toList() 只是把这些 Future 对象存入列表,并不会触发等待。此时代码会直接跳过异步操作,执行后面的 return 'done',导致数据库写入还在后台进行。
额外优化建议(可选)
如果同步的数据量较大,逐条写入SQFLite会影响性能,你可以考虑批量写入:把所有数据整理好后,调用SQFLite的批量操作接口(比如用 batch 对象执行批量插入/更新),这样能大幅提升同步效率,同时也只需要等待一次批量操作完成即可。
内容的提问来源于stack exchange,提问作者tomDev
相关产品推荐
相关产品推荐

