我的异步调用在 forEach 循环中填充列表之前返回

2024-03-16

我有一个例程,它从设备获取文件名列表,然后读取文件以构建列表。然而,调用例程总是返回零项。我打印文件名,所以我知道它们存在,但是,在我读取文件之前,异步似乎正在返回。我在进行 HTTP 调用时使用了类似的代码。但是,这里的某些事情导致例程返回列表,即使它尚未完成。也许,我可能在错误的时间调用它?我在这里调用retrieveItems:

@override
  void initState() {
    super.initState();
    retrieveItems();
  }

最终我将有一个刷新按钮,但现在我只想用文件中的数据填充列表......

--------------------

Callee

Future<List<String>> readHeaderData() async {
  List<String> l = new List();
  List<String> files = await readHeaders(); // Gets filenames
  files.forEach((filename) async {
    final file = await File(filename);
    String contents = await file.readAsString();
    User usr = User.fromJson(json.decode(contents));
    String name = usr.NameLast + ", " + usr.NameFirst;
    print(name);
    l.add(name);
  }
  return l;

Caller

void retrieveItems() async {
  LocalStorage storage = new LocalStorage();
  await storage.readHeaderData().then((item) {
      try {
        if ((item != null ) &&(item.length >= 1)) {
          setState(() {
            users.clear();
            _users.addAll(item);
          });
        } else {
          setState(() {
            _users.clear();
            final snackbar = new SnackBar(
              content: new Text('No users found.'),
            );
            scaffoldKey.currentState.showSnackBar(snackbar);
          });
        }
      } on FileNotFoundException catch (e) {
        print(e.toString()); //For debug only
        setState(() {
          _users.clear();
        });
      });
    }
  });

这段代码

Future<List<String>> readHeaderData() async {
  List<String> l = new List();
  List<String> files = await readHeaders(); // Gets filenames
  files.forEach((filename) async {
    final file = await File(filename);
    String contents = await file.readAsString();
    User user = User.fromJson(json.decode(contents));
    String name = user.NameLast + ", " + user.NameFirst;
    print(name);
    l.add(name);
  }
  return l;
}

返回列表l然后处理asycforEach(...)回调

如果你把它改成

Future<List<String>> readHeaderData() async {
  List<String> l = new List();
  List<String> files = await readHeaders(); // Gets filenames
  for(var filename in files) {  /// <<<<==== changed line
    final file = await File(filename);
    String contents = await file.readAsString();
    User user = User.fromJson(json.decode(contents));
    String name = user.NameLast + ", " + user.NameFirst;
    print(name);
    l.add(name);
  }
  return l;
}

在处理完所有文件名之前,该函数不会返回。

files.forEach((filename) async {

意味着你可以使用await在回调内部,但是forEach不关心什么(filename) async {...}返回。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我的异步调用在 forEach 循环中填充列表之前返回 的相关文章

  • 从文件中获取InputStream,该文件可能位于(或不位于)类路径中[重复]

    这个问题在这里已经有答案了 只是想知道哪种方法是读取类路径中的文件的最佳方法 我唯一拥有的是带有文件路径的属性 举个例子 文件路径 类路径 com mycompany myfile txt 文件路径 文件 myfolder myfile t
  • Python 中两个列表列表的高效比较

    我是 python 的新手 只是在做项目时学习一些东西 这里我有两个列表列表 我需要比较和分离 A gt B 中找到的差异和 b gt A 中找到的差异 最好的比较方法是什么 A 1L test case 1 1L test case 2
  • C - sscanf 不忽略空格

    我正在读取文本文件并使用逗号作为分隔符 下面的行确实有效 但是当我打印出 lname 时 它 不会忽略逗号后面的空格并在名称之前打印空格 如何调整代码以忽略空格 文本示例 罗布 史密斯 4 12 岁 某某史蒂夫 琼斯 41 286 某个文本
  • 遵循最佳实践在 flutter 中存储 API 密钥的正确方法

    这是在 flutter 中添加秘密 API 密钥的正确方法 最佳实践 以防我想将代码推送到 github 上 我制作了一个使用 API 的简单应用程序 但我以粗略的方式使用密钥只是为了测试该应用程序是否正常工作 通常根据我在后端开发应用程序
  • Flutter 小部件测试点击 - 不会在指定的小部件上进行测试

    输出以下警告后 我的小部件测试失败 flutter 警告 使用 finder 调用 tap 恰好有一个带有文本 Tab 2 的小部件 忽略后台小部件 Text Tab 2 softWrap 除换行符外不换行 溢出 淡入淡出 依赖关系 Med
  • 查找字典中列表的最大值

    我有一个字典 每个键后面都有一个存储的列表 看起来像这样 dict with values u New York u New York u NY datetime datetime 2014 8 13 0 0 10 u New York u
  • 在 x86 汇编语言中获取文件大小的简单方法

    假设我已经在汇编中打开了一个文件 并且在寄存器 eax 中有该文件的文件句柄 我将如何获取文件的大小 以便为其分配足够的缓冲区空间 我在这里研究了另一个讨论 建议使用sys fstat 28 系统调用来获取文件统计信息但无法实现它 My a
  • 计算例如具有多列 data.frames 的列表中的平均值

    我有几个 data frames 的列表 每个 data frame 有几列 通过使用mean mylist first dataframe a我可以得到这个 data frame 中 a 的平均值 但是我不知道如何计算列表中存储的所有 d
  • .bat 文件将文件排序到文件夹中

    对于我的图片集 我希望文件夹中的所有图片按日期自动分类到文件夹中 幸运的是 这些文件已经以时间戳命名 2012 07 15 12 21 06 jpg 2012 07 15 12 21 26 jpg 2012 07 16 12 12 50 j
  • 示例代码中是否需要Task.WhenAll?

    下面的代码中task1和task2是相互独立的 可以并行运行 下面两个实现有什么区别 var task1 GetList1Async var task2 GetList2Async await Task WhenAll task1 task
  • 同步写入使用 FILE_FLAG_OVERLAPPED 打开的文件

    我已经使用打开了一个文件 HANDLE handle CreateFileW fileName GENERIC READ GENERIC WRITE 0 NULL OPEN EXISTING FILE FLAG OVERLAPPED NUL
  • 渲染时 Flutter SVG 延迟

    我在行中显示 SVG 文件形式的图像和文本 由于某些原因 svg 图像的渲染速度比屏幕的其余部分慢 从而导致延迟 这不利于用户体验 这种延迟正常吗 我该怎么做才能使整个屏幕同时渲染 Row mainAxisAlignment MainAxi
  • 如何使用 Firebase_Auth 和 Flutter 登录 Twitter

    一个人应该如何编程使用 Twitter 登录特征使用firebase auth https pub dev packages firebase auth和颤动 我看到一些使用的例子flutter twitter login https pu
  • 是否可以使用 Java 在文件上设置自定义元数据?

    是否可以在 File 实例上获取和设置自定义元数据 我想将通过系统处理的文件用作某种非常简单的数据库 其中每个文件都应包含其他自定义元数据 例如发件人的电子邮件 一些时间戳等 它是针对内部系统的 因此安全性不是问题 在 java 7 中你可
  • 带有 Firebase 通知的 Flutter Web - subscribeToTopic

    我想在我的 flutter web 应用程序中接收 firebase 通知 我知道 firebase messaging 包不可用于网络 但我已经管理配置我的应用程序以获取令牌 在网络应用程序位于后台时接收并显示消息 并在应用程序位于前台时
  • Google Dart:.where() 函数如何工作?

    var fruits apples oranges bananas fruits 0 apples fruits add pears fruits length 4 fruits where f gt f startsWith a toLi
  • 打开/尝试读取文件[重复]

    这个问题在这里已经有答案了 我尝试简单地读取文本文件的内容并将其存储到数组中 但是 ins open file txt r array for line in ins array append line ins close 它给了我一个 打
  • 如何在父视图和子视图中使用组件两次(DI 是共享的,comp 是单例)

    我有一个按钮组件 具有应用程序特定行为 我打算在应用程序中广泛使用它 问题是 当我有一个使用此按钮的父 子视图时 单击父按钮会触发子视图按钮的 操作 如果不这样做 您自然不会明白发生了什么有多年的面向对象编程经验 让年轻的学校新手使用 da
  • 如何为发布而不是调试创建密钥库?扑

    我按照使用此网站部署 flutter 的步骤进行操作https flutter io android release https flutter io android release 当我运行 flutter build apk 时出现此错
  • 以编程方式在java的resources/source文件夹中创建文件?

    我有两个资源文件夹 src 这是我的 java 文件 资源 这是我的资源文件 图像 properties 组织在文件夹 包 中 有没有办法以编程方式在该资源文件夹中添加另一个 properties 文件 我尝试过这样的事情 public s

随机推荐

  • 如何在 SQL Server 和 C# 中加快读取大量数据的速度

    我的数据库中有一个包含大约 200k 条目的视图 我正在使用以下代码阅读它 using SqlConnection conn new SqlConnection conn Open string query SELECT FROM SP3D
  • Perl:写入速度之谜?

    输出速率怎么可能高于硬盘写入速率呢 Update 1 我更改了以下内容 关闭了防病毒软件 不用找了 插入新的物理磁盘并使用第一个分区 为了测试 初始测试的磁盘位于 最后一个分区 与系统分区分开 但是 在同一物理磁盘上 结果 有相同的 循环模
  • 使用自定义端点的 to.minutes

    我使用的是从上午 9 50 开始的日内数据 并希望将其转换为 20 分钟的时间间隔 因此第一个时间段是从 09 50 到 10 09 59 第二个时间段是从 10 开始 10 至 10 29 59 等 但是to minutes 来自xts软
  • F# 的隐藏功能

    Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动 这是类似的毫不掩饰的尝试C https stackoverflow com questions
  • 为什么简单的网站在移动设备(至少是 iOS Safari 和 Chrome)上会崩溃?

    我有一个非常简单但又很长的网站 有很多可以滚动浏览的文本 这是一个文档网站 考虑到内容的性质 很多简短的相似条目 我决定立即显示所有内容 因此用户可以从一个条目滚动到另一个条目 也可以通过侧边栏索引进行导航 这是我喜欢的常见文档模型 例如下
  • 外部范围不再适用于 ui-grid

    我正在将 ui grid 从 v3 0 0 RC 18 升级到 v3 0 0 rc 20 76029e7 突然 external scopes 属性停止工作 有什么替代方案吗 externalScopes在 RC 19 中被删除 您可以在此
  • Angular - 使用 \n 渲染 Markdown

    我正在尝试在 Angular 应用程序中渲染 Markdown 我正在使用ngx markdown https github com jfcere ngx markdown与 Angular 5 一起使用 效果很好 但是 我必须升级到 An
  • 在 300 万个文本文件中搜索匹配项 [已关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我有一个简单的要求 用户输入一堆单词 系统扫描超过 300 万个文本文件并找到包含这些关键字的文件 在没有复杂的搜索 索引算法的情况下实现这
  • 使用样式表设置 QGroupBox 标题字体大小

    我希望能够使用样式表设置 QGroupBox 标题的字体大小 我似乎无法弄清楚 根据我读过的内容here http qt project org doc qt 4 7 stylesheet examples html id bfd71794
  • Ansible:无法设置变量以顺序执行

    我正在尝试构建一个带有滚动更新用例 顺序执行 的剧本serial元素 由于我必须在剧本中的多个位置使用序列值 因此我想将其用作变量 可用于将某处定义为组变量 库存档案 all webserver1 ansible host 10 1 1 1
  • Python单元测试中setUp()和setUpClass()有什么区别?

    有什么区别setUp and setUpClass 在Python中unittest框架 为什么要使用一种方法而不是另一种方法来处理设置 我想了解设置的哪一部分是在setUp and setUpClass 函数 以及tearDown and
  • C# WinForms UserControl 鼠标事件帮助

    我有一个为我的项目创建的自定义控件 在此控件中有几个子控件 例如 Label PictureBox 和 LinkLabel 除了 LinkLabel 之外 我希望当前鼠标悬停在父控件上的事件并使控件响应鼠标悬停 当您将鼠标悬停在控件上时 背
  • Azure 网站 Kudu 发布因超时而失败

    我为我的 azure 部署定义了一个自定义部署脚本 sh 脚本 就在今天 我发现我无法发布 我更新了我的 bitbucket 存储库 过了一会儿 我收到类似于以下内容的错误 Command starter cmd deploy pvl co
  • 如何防止express-ejs-layouts 包装我的其他页面?

    我正在寻找 Node js 的页面布局 例如php https laravel com docs 5 0 templates有他们的布局模板 非常完美 我想在node js中实现它 最后找到了这个快速 ejs 布局 https www np
  • 重叠金属点基元和混合

    我正在渲染部分重叠的点基元 片段着色器将每个点基元正方形的部分着色为透明 实心中心圆 不与任何其他点基元重叠的点基元将按预期着色 正方形的透明区域显示背景 当这样的点基元与另一个点基元重叠时 行为是意外的 具体来说 透明区域不显示周围点图元
  • 检查 Selenium 中的 HTTP 状态代码

    如何在Selenium中获取HTTP状态码 例如 所以我可以测试一下 如果浏览器请求 user 27并且不存在ID 27的用户 则返回HTTP 404 我的主要兴趣是 Selenium RC 但如果有人知道 正常 selenium 的答案
  • 如何显示加在一起等于零的行

    几周来一直在寻找解决方案 但一无所获 我有类似这样的数据表 client ref supplier key client amount 1111 GBP 10 1111 GBP 10 1111 EUR 50 2222 CHF 22 5 22
  • 画布内存使用总量超出最大限制 (Safari 12)

    我们正在研究一个可视化网络应用程序 https affinitymap epfl ch它使用 d3 force 在画布上绘制网络 但现在 iOS 上的浏览 器遇到了问题 在与界面进行几次交互后 进程就会崩溃 据我记得 这不是旧版本 iOS1
  • 未知的输入格式:'x11grab'

    guys 当我编译 ffmpeg 并在 linux 中运行 ffmpeg 时遇到问题 我的环境 1 ubuntu 17 10 x64 bit 我认为操作系统版本不是关键 2 gcc Ubuntu 6 3 0 19ubuntu1 6 3 0
  • 我的异步调用在 forEach 循环中填充列表之前返回

    我有一个例程 它从设备获取文件名列表 然后读取文件以构建列表 然而 调用例程总是返回零项 我打印文件名 所以我知道它们存在 但是 在我读取文件之前 异步似乎正在返回 我在进行 HTTP 调用时使用了类似的代码 但是 这里的某些事情导致例程返