等待语句时返回的Flutter函数

bvhaajcl  于 2023-02-09  发布在  Flutter
关注(0)|答案(1)|浏览(134)

我正在使用flutter和cbl包来持久化数据。试图检索条目似乎不起作用,因为创建的函数在await语句返回,而不是return语句。这似乎不像darts async/await功能的预期结果。所以我迷路了。
任务数据库.dart

Future<dynamic> getAllTasks() async {
    final tasksDb = await Database.openAsync(database);  <---------- Returns here 

    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; <-------------------------------------------- Does not make it here
  }

task_腕尺.省道

getAllTasks() => {
        allTaskMap = TasksAbcDatabase().getAllTasks(),
        emit(TaskState(tasks: state. Tasks))
    };

我尝试过的。我尝试过使用Database.openSync而不是Database.openAsync,但是,函数只是在下一个await语句返回。我还尝试过使getAllTasks异步,并像这样等待数据库。

Future<void> getAllTasks() async => {
        allTaskMap = await TasksAbcDatabase().getAllTasks(),
        emit(TaskState(tasks: state. Tasks))
    };

然而,这也有同样的问题,当task_database中的函数过早返回时,它会在getAllTasks中的第一个await函数(allTaskMap变量)处返回。
谢谢

8fq7wneg

8fq7wneg1#

没有return语句的函数 * 不能 *"过早返回"。
缩短执行的唯一方法是exception变为thrown。
我也不明白当你不使用await语句时,你怎么会不出现语法错误。
所以要确保你所有的await都在适当的位置。使用linter来查找那些缺失的。当你在做的时候,从你的词汇表中删除关键字dynamic,如果你不需要它就使用它,它只会伤害你。你的返回类型应该被正确地输入,然后你的编译器会告诉你,从一个显然应该返回多个任务的函数返回单个任务是行不通的。
要么捕获异常并确保您知道存在异常,要么不捕获异常并看着它们一直进入调试器。
此外,在@jamesdlin的注解之后,您的函数定义是...有效的,但很可能没有做您认为它们正在做的事情。

Future<void> getAllTasks() async => {
    allTaskMap = await TasksAbcDatabase().getAllTasks(),
    emit(TaskState(tasks: state. Tasks))
};

必须是

Future<void> getAllTasks() async {
    allTaskMap = await TasksAbcDatabase().getAllTasks();
    emit(TaskState(tasks: state. Tasks));
}

相关问题