我的异步调用在 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 循环中填充列表之前返回 的相关文章

  • dart javascript 编译器 (dart2js) 如何工作?

    Dart 在其自己的 Dart VM 中运行 但您可以将其编译为现代优化的 JavaScript 但这是如何运作的呢 网上有任何文章或论文解释该过程吗 我想知道这是否是一个简单直接的元素与元素匹配 仅耗时开发 处理 或者 Dart 的某些元
  • 使用 Flutter 基础类型而不使用 Flutter

    我需要在没有 Flutter 的环境中使用 lib package flutter foundation dart 中存在三种类型 他们是 ByteData ReadBuffer and WriteBuffer 是否可以在不依赖整个 Flu
  • 异步尝试(blah)模式[重复]

    这个问题在这里已经有答案了 我正在寻找有关如何处理以下情况的建议 我正在创建尝试获取某些数据的方法 遵循以下模式 Typical pattern public bool TryBlah string key out object value
  • 使用 find - 删除除任何一个之外的所有文件/目录(在 Linux 中)

    如果我们想删除我们使用的所有文件和目录 rm rf 但是 如果我希望一次性删除除一个特定文件之外的所有文件和目录怎么办 有什么命令可以做到这一点吗 rm rf 可以轻松地一次性删除 甚至可以删除我最喜欢的文件 目录 提前致谢 find ht
  • 函数不会等到 Promise 得到解决

    我正在开发一个简单的不和谐机器人 我正在尝试打印有关某个玩家的一些一般数据 我最近了解了 async await 并尝试将其实现到我的代码中 然而 它似乎不起作用 因为当我第一次触发此代码时 它会打印 null 但在后续触发时 它将打印正确
  • 如何根据扩展名获取文件类型信息? (不是 MIME)在 c# 中

    如何获取基于扩展名的一般文件类型描述 如资源管理器 所以不是 MIME 而是最终用户看到的信息 doc Microsoft Office Word 97 2003 文档 zip ZIP 文件 avi 视频文件 我怎样才能获得似乎可用的 辅助
  • flutter 中 sqlite 中的多个参数

    我想知道如何将多个参数传递给 sqllite 中的原始查询 我的代码如下 query async get a reference to the database Database db await DatabaseHelper instan
  • 两个布尔列表之间的逻辑运算

    我得到了一个奇怪的结果 我尝试应用and or the orpython 中 2 个布尔列表的运算符 事实上 我得到的结果与我的预期完全相反 True False False and True True False gt True True
  • flutter:动画过渡到命名路线

    当我使用Navigator pushNamed context someRoute 有一个最小的动画 从屏幕底部沿着新路线滑动 在 Android 上 在 iOS 上可能看起来不同 如何向此过渡添加自定义动画 I found 本文 http
  • 什么是 Microsoft.Bcl.Async?

    什么是 Microsoft Bcl Async 它的用途是什么 我已经读过包装页面 https www nuget org packages Microsoft Bcl Async that 此包使 Visual Studio 2012 项
  • SocketException:主机查找失败:“...com”(操作系统错误:未提供节点名或服务名,或未知,errno = 8)

    我们面临的情况是 生产应用程序面临以下套接字异常 并且在此之后无法执行任何其他网络操作 DioError DioErrorType DEFAULT SocketException Failed host lookup xyz abc com
  • 在 Haskell 中合并两个列表

    无法弄清楚如何合并两个列表通过以下方式在哈斯克尔 INPUT 1 2 3 4 5 11 12 13 14 OUTPUT 1 11 2 12 3 13 4 14 5 我想提出一个更懒的合并版本 merge ys ys merge x xs y
  • 为什么即使当我尝试从工作线程更改 UI 时,同步上下文仍为空?为什么即使我不这样做,工作线程也会在 UI 线程上等待?

    我在表单上有一个按钮 点击它我调用FooAsync并在完成时阻止 UI 线程 下面是代码和我的问题 using System using System Diagnostics using System Threading using Sys
  • 如何在 R 中合并同名列表中的数据框?

    我有一个包含很多数据框的列表 如果它们具有相同的名称 我想合并它们 即合并所有具有相同名称 a 和 b 的数据框 像这样 a lt aaaaa b lt bbbbb c lt ccccc g lt list df1 lt data fram
  • R中的字典数据结构

    在 R 中 我有 例如 gt foo lt list a 1 b 2 c 3 如果我输入foo I get a 1 1 b 1 2 c 1 3 我怎样才能看透foo仅获取 键 列表 在这种情况下 a b c R 列表可以具有命名元素 因此可
  • Dart 从 UInt8List 获取扩展

    我正在使用该包图像选择器 https pub dev packages image picker接受来自用户的图像 这会产生 PickedFile 和字节数组 由于图像随后被上传 我想知道如何从字节数组中猜测 mime 类型 PickedF
  • C# List 内部结构

    将对象添加到集合 例如 List 时到底会发生什么 List
  • WPF 中的调度程序和异步等待

    我正在尝试学习 WPF C 中的异步编程 但我陷入了异步编程和使用调度程序的困境 它们是不同的还是在相同的场景中使用 我愿意简短地回答这个问题 以免含糊不清 因为我知道我混淆了 WPF 中的概念和函数 但还不足以在功能上正确使用它 我在这里
  • 将目录压缩为单个文件的方法有哪些

    不知道怎么问 所以我会解释一下情况 我需要存储一些压缩文件 最初的想法是创建一个文件夹并存储所需数量的压缩文件 并创建一个文件来保存有关每个压缩文件的数据 但是 我不被允许创建许多文件 只能有一个 我决定创建一个压缩文件 其中包含有关进一步
  • Flutter Web 崩溃并显示无法打开文件 client.js

    我可以就这个错误请求你的帮助吗 当我第一次尝试使用 flutter run d chrome 运行 flutter web 时会发生这种情况 Launching lib main dart on Chrome in debug mode 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 调用时使用了类似的代码 但是 这里的某些事情导致例程返