ArkTS 异步并发

发布时间:2026/9/15 3:32:52

ArkTS 异步并发 Promise 和 async/await 是标准的 JS 异步语法提供异步并发能力。异步代码执行时会被挂起在异步操作完成后恢复执行确保同一时间只有一段代码在运行。以下是典型的异步并发使用场景I/O 非阻塞操作网络请求、文件读写、定时器等。任务轻量且无 CPU 阻塞单次任务执行时间短。逻辑依赖清晰任务有明确的顺序或并行关系。异步并发是一种编程语言的特性允许程序在执行某些操作时不必等待其完成可以继续执行其他异步代码。PromisePromise 是一种用于处理异步操作的对象可将异步操作转换为类似同步操作的风格便于代码编写和维护。Promise 通过状态机制管理异步操作的不同阶段有三种状态pending进行中、fulfilled已完成也叫 resolved和rejected已拒绝。创建后处于 pending 状态异步操作完成后转换为 fulfilled 或 rejected 状态。Promise 提供了 then、catch、finally 方法来注册回调函数以处理异步操作的成功或失败结果。当 Promise 状态改变时回调函数会被加入微任务队列等待执行依赖事件循环机制在宏任务执行完成后优先执行微任务从而保证回调函数的异步调度。最基本的用法是通过构造函数实例化一个 Promise 对象传入一个带有两个参数的函数称为 executor 函数。executor 函数接收两个参数resolve 和 reject分别表示异步操作成功和失败时的回调函数。例如以下代码创建了一个 Promise 对象并模拟了一个异步操作const promise: Promisenumber new Promise((resolve: Function, reject: Function) { setTimeout(() { const randomNumber: number Math.random(); if (randomNumber 0.5) { resolve(randomNumber); } else { reject(new Error(Random number is too small)); } }, 1000); })在上述代码中setTimeout 函数模拟了一个异步操作1 秒后生成一个随机数。如果随机数大于 0.5调用 resolve 回调函数并传递该随机数否则调用 reject 回调函数并传递一个错误对象。Promise 对象创建后可以使用 then 方法和 catch 方法指定 fulfilled 状态和 rejected 状态的回调函数。then 方法可接受两个参数一个处理 fulfilled 状态的函数另一个处理 rejected 状态的函数。只传一个参数则表示当 Promise 对象状态变为 fulfilled 时then 方法会自动调用这个回调函数并将 Promise 对象的结果作为参数传递给它。使用 catch 方法注册一个回调函数用于处理“失败”的结果即捕获 Promise 的状态改变为 rejected 状态或操作失败抛出的异常。Promise 还可以使用 finally 注册回调函数无论 Promise 最终状态如何fulfilled 或 rejected都会执行该回调函数。例如import { BusinessError } from kit.BasicServicesKit; // ... /* * Promise 对象创建后可以使用 then 方法和 catch 方法指定 fulfilled 状态和 rejected 状态的回调函数。 * then 方法可接受两个参数一个处理 fulfilled 状态的函数另一个处理 rejected 状态的函数。 * * 只传一个参数则表示当 Promise 对象状态变为 fulfilled 时then 方法会自动调用这个回调函数并将 Promise 对象的结果作为参数传递给它。 * 使用 catch 方法注册一个回调函数用于处理“失败”的结果即捕获 Promise 的状态改变为 rejected 状态或操作失败抛出的异常。 */ // 使用 then 方法定义成功和失败的回调 promise.then((result: number) { console.info(Succeeded in getting number, number is ${result}); // 成功时执行 }, (error: BusinessError) { console.error(error.message); // 失败时执行 } ); // 使用 then 方法定义成功的回调catch 方法定义失败的回调 promise.then((result: number) { console.info(Succeeded in getting number, number is ${result}); // 成功时执行 }).catch((error: BusinessError) { console.error(error.message); // 失败时执行 });在上述代码中then 方法的回调函数接收 Promise 对象的成功结果并输出至控制台。如果 Promise 对象进入 rejected 状态catch 方法的回调函数接收错误对象并输出至控制台。当 Promise 被 reject 且未通过 catch 方法处理时会触发 globalUnhandledRejectionDetected 事件。可使用 errorManager.on(‘globalUnhandledRejectionDetected’) 接口监听该事件以全局捕获未处理的 Promise reject。async/awaitasync/await 是用于处理异步操作的 Promise 语法糖使编写异步代码更加简单和易读。使用 async 关键字声明异步函数并使用 await 关键字等待 Promise 的解析fulfilled 或 rejected以同步方式编写异步操作的代码。async 函数返回 Promise 对象实现异步操作。函数内部可包含零个或多个 await 关键字await 会暂停执行直到关联的 Promise 完成状态转换fulfilled 或 rejected。若函数执行过程中抛出异常该异常将直接触发返回的 Promise 进入 rejected 状态错误对象可通过 catch 方法或 then 的第二个回调参数捕获。下面是一个使用 async/await 的示例模拟同步方法执行异步操作的场景3 秒后返回一个字符串。async function myAsyncFunction(): Promisestring { const result: string await new Promise((resolve: Function) { setTimeout(() { resolve(Hello, world!); }, 3000); }); console.info(result); // 输出 Hello, world! return result; } Entry Component struct PromiseAsyncAwait { State message: string Hello World; build() { Row() { Column() { Text(this.message) .fontSize(50) .fontWeight(FontWeight.Bold) .onClick(async () { let res await myAsyncFunction(); console.info(Result is: res); this.message success; }) } .width(100%) } .height(100%) } }
延伸阅读

更多相关文章

2026/9/12 22:11:27

大模型API稳定性与易用性评估及选型指南

1. 为什么需要关注大模型API的稳定性与易用性 在AI应用开发领域,大模型API的接入质量直接影响项目成败。最近半年处理过47个企业级AI项目,其中31个卡在API对接环节——要么响应不稳定导致用户体验断裂,要么文档晦涩难懂拖慢开发进度。OpenCla…

2026/9/11 1:05:18

柑橘病害YOLO检测数据集构建与模型优化实战

1. 项目背景与核心价值 柑橘病害检测数据集(YOLO格式)是农业AI领域的重要基础设施资源。作为国内首个公开可用的柑橘类作物病害标准化检测数据集,它解决了传统农业病害识别中样本不足、标注不规范两大痛点。我在参与某省智慧农业项目时&#…

2026/9/15 6:41:37

AI前端面试黄金准备期:SSE流式处理与TypeScript类型守门实战

1. 为什么9月8号是今年AI前端面试准备的黄金启动日?如果你正盯着日历,犹豫“现在开始准备AI方向的前端面试,到底来不来得及”,那我得先告诉你一个反直觉但被上百份真实offer验证过的结论:9月8号不是太晚,而…

2026/9/15 6:41:37

联合储能系统在配电网优化调度中的应用与Matlab实现

1. 项目概述:联合储能在配电网中的关键作用电力系统正经历着从传统化石能源向可再生能源转型的关键时期。在这个转型过程中,配电网作为连接发电侧和用户侧的"最后一公里",面临着前所未有的挑战与机遇。我最近完成的一个研究项目&am…

2026/9/15 6:41:37

专业图片去水印技术解析与高效工具实操指南

1. 图片去水印工具的核心价值与应用场景作为一名经常处理图片素材的视觉设计师,我深知水印对作品完整性的破坏有多严重。无论是从网络获取的参考图、客户提供的带版权标记的素材,还是自己早期添加水印后需要重新编辑的旧作品,水印的存在往往成…

2026/9/15 6:41:37

别再滥用Redis!后端缓存设计的三个致命误区

去年,我们一个商品详情服务接入了Redis,QPS从两千涨到了两万,团队欢呼雀跃。三个月后,一次缓存雪崩,数据库被打穿,服务瘫痪了四十分钟。复盘时才发现,我们把Redis当成了万能药,却踩了…

2026/9/15 6:36:37

AI论文写作工具评测与职称论文高效写作方案

1. AI论文写作工具的价值与现状作为一名科研工作者和学术编辑,我亲历了从传统论文写作到AI辅助写作的转变过程。职称论文作为专业技术人员晋升的重要依据,其质量直接影响职业发展。但现实中,许多专业人士面临时间紧张、写作经验不足、格式规范…

2026/9/15 4:54:30

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/15 0:01:16

AI英语单词APP开发:自适应学习算法与移动端优化实践

1. 项目概述 作为一名在移动应用开发领域摸爬滚打多年的老手,我最近完成了一个AI英语单词APP的开发项目。这个项目将传统单词记忆方法与现代AI技术相结合,打造了一款能够智能适应不同用户学习习惯的英语学习工具。 市面上大多数单词APP都存在一个通病&a…

2026/9/15 0:01:16

Flutter与OpenHarmony结合开发手语学习APP实战

1. 项目背景与核心价值作为一名同时接触过Flutter和OpenHarmony的开发者,最近我完成了一个基于Flutter for OpenHarmony的手语学习APP实战项目。这个项目最大的特点在于实现了跨平台框架与国产操作系统深度结合的创新实践——用Flutter开发的应用能完美运行在OpenHa…

2026/9/15 0:01:16

六个月成为机器人工程师:从ROS2到SLAM的实战路径

1. 六个月的紧迫感从哪来:先搞清楚你要成为哪种机器人工程师说实话,六个月的期限并不是一个宽松的时间线。市面上任何一本正经的机器人学教材都超过五百页,ROS2的官方文档可以翻到你怀疑人生,再加上ABB、KUKA这些工业机器人厂家动…

2026/9/14 11:59:31

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/14 13:53:59

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/14 11:22:57

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码