Flutter使用cbl包时async/await函数提前返回问题求助
Flutter + CBL 数据持久化异步函数提前返回问题
使用Flutter结合cbl包做数据持久化时,检索数据条目出现异常:自定义异步函数在await Database.openAsync(database)处提前返回,完全没执行到后续的return语句,这和Dart async/await的预期行为不符,目前陷入困境。
task_database.dart 代码
Future<dynamic> getAllTasks() async { final tasksDb = await Database.openAsync(database); // <---------- 此处提前返回 var tasksQuery = const QueryBuilder() .select(SelectResult.all()) .from(DataSource.database(tasksDb)); final resultSet = await tasksQuery.execute(); late var task; await for (final result in resultSet.asStream()) { final map = result.toPlainMap(); final taskDao = TaskDao.fromJson(map); task = taskDao.task; // Do something with the task... print(task); } return task; // <-------------------------------------------- 未执行到此处 }
task_cubit.dart 原始代码
getAllTasks() => { allTaskMap = TasksAbcDatabase().getAllTasks(), emit(TaskState(tasks: state.Tasks)) };
已尝试的解决方法
- 将
Database.openAsync替换为Database.openSync,但函数会在下一个await语句处提前返回; - 将cubit中的
getAllTasks改为异步函数并等待数据库操作,代码如下:
Future<void> getAllTasks() async => { allTaskMap = await TasksAbcDatabase().getAllTasks(), emit(TaskState(tasks: state.Tasks)) };
但问题依旧:当task_database中的函数提前返回时,cubit中的getAllTasks也会在第一个await语句(allTaskMap赋值处)提前返回。
内容的提问来源于stack exchange,提问作者ibbs
相关产品推荐
相关产品推荐

