flutter - Flutter Await不等待

标签 flutter asynchronous dart async-await

为什么程序在进入打印语句之前不等待函数返回列表?
我认为这是因为我使forEach循环异步,但我需要使其异步才能获得newSummary,这是一个Future。

Future syncToCloud() async{
  final List<Map<String,dynamic>> _events = await events();
  print(_events.length);
}
  
  
Future<List<Map<String, dynamic>>> events() async {
  List<Map<String, dynamic>> maps = await db.query('data');
  List<Map<String, dynamic>> newMaps=[];

  maps.forEach((element)async{
    Map<String, dynamic> newElement = {};

    if(element['summary']!=''){
      newElement['summary'] = await newSummary(element['summary']);
      print(newElement['summary']);
    }
    else{
      newElement['summary'] = element['summary'];
    }
    newMaps.add(newElement);
  });
  
    return newMaps;
}
  

void main()async{
  await syncToCloud();
}

最佳答案

您正在无法执行的回调中执行return [{'hi':5}]。您应该等待Future.delayed,然后像await Future.delayed(Duration(seconds: 2));这样返回List。

Future syncToCloud() async{
  final List<Map<String,dynamic>> _events = await events();
  print(_events.length);
}
  
  
Future<List<Map<String, dynamic>>> events() async {
  await Future.delayed(Duration(seconds: 2));
  return [{'hi':5}];
}
  

void main()async{
  await syncToCloud();
}

关于flutter - Flutter Await不等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62734766/

相关文章:

flutter - 使用 ConstrainedBox 和 Container 小部件为其子框提供约束有什么区别?

javascript - ng-model 到我的服务器上的异步 xhr get/set 字段

save - 如何在 Flutter 中一开始就加载主题

c# - 使用任务时的 Nlog 时间戳

java - Java异步执行MySQL查询语句的简单方法

multithreading - 从Dart中的多个异步流修改对象

flutter - 找不到 AndroidManifest.xml

javascript - Google Dart 添加元素到 DropDown

android - 从 Flutter 中的函数名获取函数

sqlite - Flutter SQLite数据库表存在但未被SQFLite检测到