告别 Dart 中的 Future.wait([])
作为 Dart 开发人员,我们对异步编程和 Futures 的强大功能并不陌生。过去,当我们需要同时等待多个 future 时,我们依赖 Future.wait([]) 方法,该方法返回一个 List<T>。然而,这种方法有一个显着的缺点:我们必须手动将结果转换为所需的类型,这可能会导致代码冗长且容易出错。
final results = await Future.wait([Future.value("andrew"),Future.value(1984),
]);
expect((results[0] as String).toUpperCase(), "ANDREW");
expect((results[1] as int).isNegative, false);
幸运的是,有一个更优雅的解决方案,它利用了扩展和 async/await 语法的强大功能: zipWith 扩展方法。
介绍 zipWith
zipWith 扩展方法允许您将两个 future 的结果组合成一个类型化元组,从而无需手动转换。它的工作原理如下:
final (name, year) = await Future.value("andrew").zipWith(Future.value(1984));
expect(name.toUpperCase(), "ANDREW");
expect(year.isNegative, false);
在此示例中,我们将合并两个 future 的结果:一个解析为字符串 “andrew”,另一个解析为整数 1984。该 zipWith 方法返回一个元组, (T, T2) 其中 T 是第一个未来的类型, T2 是第二个未来的类型。
但是等等,还有更多!您甚至可以链接多个 zipWith 调用来组合三个或更多 future 的结果:
final ((name, year), married) = await Future.value("andrew").zipWith(Future.value(1984)).zipWith(Future.value(false));
// ...
expect(married, false);
在此示例中,我们将三个 futures 组合在一起,从而生成一个嵌套元组 ((T, T2), T3) 。
引擎盖下
那么,zipWith 是如何施展魔法的呢?下面是实现方法:
extension FutureZipX<T> on Future<T> {Future<(T, T2)> zipWith<T2>(Future<T2> future2) async {late T result1;late T2 result2;await Future.wait([then((it) => result1 = it),future2.then((it) => result2 = it)]);return (result1, result2);}
}
结束语
通过利用 zipWith 的强大功能,您可以在处理多个异步操作时编写更简洁、更具表现力的代码。无需再手动转换或摆弄 List<dynamic> - 只需简洁、类型安全的元组,使您的代码更易于阅读和维护。
因此,下次当您发现自己要兼顾多个 future 时,请尝试一下 zipWith,体验 Dart 中简化异步编程的乐趣。
相关文章:
告别 Dart 中的 Future.wait([])
作为 Dart 开发人员,我们对异步编程和 Futures 的强大功能并不陌生。过去,当我们需要同时等待多个 future 时,我们依赖 Future.wait([]) 方法,该方法返回一个 List<T>。然而,这种方法有一个显着的缺点࿱…...
Cisco ASA防火墙抓包命令Capture
在日常运维中,遇到故障时经常需要在ASA上抓包进行诊断。 从抓包中可以看到流量是否经过ASA流量是否被ASA放行,或block,匹配的哪一条ACL capture在Firepower平台上同样适用,无论跑的是ASA还是FTD 1 抓包命令 capture 2 配置方…...
Linux网络编程:HTTP协议
前言: 我们知道OSI模型上层分为应用层、会话层和表示层,我们接下来要讲的是主流的应用层协议HTTP,为什么需要这个协议呢,因为在应用层由于操作系统的不同、开发人员使用的语言类型不同,当我们在传输结构化数据时&…...
HTTP 协议中 GET 和 POST 有什么区别?分别适用于什么场景?
HTTP 协议中 GET 和 POST 是两种常用的请求方法,它们的区别如下: 1. 参数传递方式不同 GET 请求参数是在 URL 中以键值对的形式传递的,例如:http://www.example.com/?key1value1&k ey2value2。 而 POST 请求参数是在请求体中以键值对的…...
talib 安装
这里写自定义目录标题 talib 安装出错 talib 安装出错 https://github.com/cgohlke/talib-build/releases 这里找到轮子 直接装。...
echarts-树图、关系图、桑基图、日历图
树图 树图主要用来表达关系结构。 树图的端点也收symbol的调节 树图的特有属性: 树图的方向: layout、orient子节点收起展开:initialTreeDepth、expandAndCollapse叶子节点设置: leaves操作设置:roam线条:…...
04Django项目基本运行逻辑及模板资源套用
对应视频链接点击直达 Django项目用户管理及模板资源 对应视频链接点击直达1.基本运行逻辑Django的基本运行路线:视图views.py中的 纯操作、数据返回、页面渲染 2.模版套用1.寻找一个好的模版2.模板部署--修改适配联动 OVER,不会有人不会吧不会的加Q1394…...
安徽大学数学科学学院教授陈昌昊
男,本(2005-2009)、硕(2009-2012)学位都在湖北大学获得,博士学位在芬兰获得(2012-2016),博士后分别在澳大利亚(2016-2019)、香港(2020…...
com.alibaba.fastjson.JSONObject循环给同一对象赋值会出现“$ref“:“$[0]“现象问题
1、问题描述 有些场景下,我们会选择用JSONObject代替Map来处理业务逻辑,但是使用JSONObject时有一个需要注意的地方:在处理JSONObject对象时,引用的com.alibaba.fastjson.JSONObject,在一个集合中,循环给这…...
【C++】详解AVL树——平衡二叉搜索树
个人主页:东洛的克莱斯韦克-CSDN博客 祝福语:愿你拥抱自由的风 目录 二叉搜索树 AVL树概述 平衡因子 旋转情况分类 左单旋 右单旋 左右双旋 右左双旋 AVL树节点设计 AVL树设计 详解单旋 左单旋 右单旋 详解双旋 左右双旋 平衡因子情况如…...
《计算机网络微课堂》2-2 物理层下面的传输媒体
请大家注意,传输媒体不属于计算机网络体系结构的任何一层,如果非要将它添加到体系结构中,那只能将其放在物理层之下。 传输媒体可分为两类:一类是导引型传输媒体,另一类是非导引型传输媒体。 在导引型传输媒体…...
【算法设计与分析】基于Go语言实现动态规划法解决TSP问题
本文针对于最近正在学习的Go语言,以及算法课实验所需内容进行Coding,一举两得! 一、前言 由于这个实验不要求向之前的实验一样做到那种连线的可视化,故可以用图形界面不那么好实现的语言进行编写,考虑到Go语言的…...
Golang单元测试
文章目录 传统测试方法基本介绍主要缺点 单元测试基本介绍测试函数基准测试示例函数 传统测试方法 基本介绍 基本介绍 代码测试是软件开发中的一项重要实践,用于验证代码的正确性、可靠性和预期行为。通过代码测试,开发者可以发现和修复潜在的错误、确保…...
mac下安装airflow
背景:因为用的是Mac的M芯片的电脑,安装很多东西都经常报错,最近在研究怎么把大数据集群上的crontab下的任务都配置到一个可视化工具中,发现airflow好像是个不错的选择,然后就研究怎么先安装使用起来,后面再…...
二进制中1的个数c++
题目描述 计算鸭给定一个十进制非负整数 NN,求其对应 22 进制数中 11 的个数。 输入 输入包含一行,包含一个非负整数 NN。(N < 10^9) 输出 输出一行,包含一个整数,表示 NN 的 22 进制表示中 11 的个数。 样例输入 100 …...
【面试干货】数据库乐观锁,悲观锁的区别,怎么实现
【面试干货】数据库乐观锁,悲观锁的区别,怎么实现 1、乐观锁,悲观锁的区别2、总结 💖The Begin💖点点关注,收藏不迷路💖 1、乐观锁,悲观锁的区别 悲观锁(Pessimistic Lo…...
移动端仪表盘,支持更多组件
05/22 主要更新模块概览 定位函数 快捷筛选 轨迹图表 时间组件 01 表单管理 1.1 【表单组件】- 表单关联新增支持自定义按钮样式 说明: 表单关联-关联数据按钮,原仅支持默认按钮样式,现增加关联数据按钮自定义功能,满…...
科技产业园3D探秘:未来科技之城的奇幻之旅
在数字时代的浪潮中,科技产业园区成为了推动城市经济发展、科技创新的重要引擎。 当我们打开科技产业园的3D可视化模型,仿佛穿越时空,来到了一个充满奇幻色彩的科技世界。在这里,高楼大厦鳞次栉比,绿色植被点缀其间&am…...
【Python搞定车载自动化测试】——Python基于Pytest框架实现UDS诊断自动化(含Python源码)
系列文章目录 【Python搞定车载自动化测试】系列文章目录汇总 文章目录 系列文章目录💯💯💯 前言💯💯💯一、环境搭建1.软件环境2.硬件环境 二、目录结构三、源码展示1.诊断基础函数方法2.诊断业务函数方法…...
探索SPI单线传输模式中时钟线与数据传输的简化
探索SPI单线传输模式:时钟线与数据传输的简化之道 在当今的嵌入式系统和微控制器通信中,串行外设接口(SPI)因其高速、全双工和同步的特点而广受欢迎。然而,随着设备尺寸和复杂性的不断减少,对SPI通信的简化…...
基于STM32LXXX的数字电位器(AD5160BRJZ5-RL7)驱动应用程序设计
一、简介: AD5160BRJZ5-RL7 是 ADI 推出的一款 256 位、SPI 接口数字电位器,采用 SOT-23-8 封装,阻值为 5kΩ,非常适合用于需要精确电阻调节的电路设计。 二、主要技术特性: 基本规格:单通道、256 抽头位置、端到端电阻 5kΩ(另有 10kΩ/50kΩ/100kΩ 版本),20% 电阻…...
终极指南:如何用Dism++轻松优化Windows系统并释放30GB空间
终极指南:如何用Dism轻松优化Windows系统并释放30GB空间 【免费下载链接】Dism-Multi-language Dism Multi-language Support & BUG Report 项目地址: https://gitcode.com/gh_mirrors/di/Dism-Multi-language Windows系统用久了总是卡顿?磁盘…...
Qwen3-14B私有部署镜像:利用MATLAB进行大模型输出数据分析与可视化
Qwen3-14B私有部署镜像:利用MATLAB进行大模型输出数据分析与可视化 1. 科研数据分析的新思路 在科研和工程领域,我们经常需要处理大量文本数据。传统的人工分析方法不仅耗时耗力,而且难以发现深层次的规律。Qwen3-14B作为一款强大的开源大语…...
如何用Input Leap实现跨设备控制?打造无缝多设备协作体验
如何用Input Leap实现跨设备控制?打造无缝多设备协作体验 【免费下载链接】input-leap Open-source KVM software 项目地址: https://gitcode.com/gh_mirrors/in/input-leap 在多设备办公环境中,频繁切换键盘鼠标不仅打断工作流,更降低…...
案例速递|手机摄像头模组底壳检测
东莞市沃德普自动化科技有限公司 www.wordop.com 检测背景: 在手机摄像头模组的精密制造流程中,模组底壳是镜头、CMOS传感器、VCM马达的核心承载与定位基准,其表面质量直接决定模组的装配精度、光学性能与长期使用可靠性。 检测需求&#x…...
GPT-6「土豆」4月14日发布:性能暴涨40%,国内用户怎么第一时间用上?
TL;DR:OpenAI 内部代号「土豆」的 GPT-6 定档 4 月 14 日发布,代码和 Agent 能力较前代提升 40%,上下文扩至 200 万 Token。本文拆解它的核心能力变化,并整理国内用户第一时间用上的可行方案。GPT-6 到底升级了什么 4 月 7 日&…...
Katran性能优化终极指南:10个从驱动模式到通用XDP的核心技巧
Katran性能优化终极指南:10个从驱动模式到通用XDP的核心技巧 【免费下载链接】katran A high performance layer 4 load balancer 项目地址: https://gitcode.com/gh_mirrors/ka/katran Katran作为一款高性能的四层负载均衡器,基于BPF和XDP技术构…...
揭秘AI写教材技巧!利用AI教材写作实现低查重、高质量教材编写!
教材创作:AI工具助力原创与合规平衡 在教材编写过程中,如何做到原创与合规的平衡是一个重要的议题。很多时候,创作者会在借鉴优秀教材时担心查重率超标,而在自行撰写知识点时又可能面临逻辑不够严谨和内容不准确的问题。引用他人…...
STM32F103串口DMA实战:从CubeMX配置到实现一个稳定的数据收发中间件
STM32F103串口DMA实战:构建工业级通信中间件的五个关键设计 在嵌入式开发中,串口通信就像设备的神经系统,而DMA则是让这个系统高效运转的关键。想象一下,当你需要同时处理4G模块的数据传输、LoRa无线通信和调试日志输出时&#x…...
解决方案命名怎么做:从内部术语到客户听得懂的命名结构
很多B2B企业在做官网重构 销售PPT升级 或方案页梳理时 都会遇到一个非常典型的问题 企业内部对方案很清楚 但客户还是很难快速看懂更具体一点说 客户不是完全不理解 而是会停在一种非常典型的状态里听起来很专业看起来内容很多但一下子抓不到重点也不知道这套方案到底和自己有什…...
