发布时间:2026/7/24 9:13:44
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/7/24 9:08:44

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

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

2026/7/24 9:08:44

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

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

2026/7/24 10:43:49

OpenClaw Skill技能安装与使用实战指南

1. OpenClaw Skill技能安装与使用指南OpenClaw作为新一代AI代理平台,其Skill技能系统让普通用户也能通过简单指令调用专业AI能力。想象一下,只需对AI说"帮我整理这份文档"或"生成季度报表",它就能自动完成复杂任务——这…

2026/7/24 10:43:49

Ubuntu软件源签名错误解决方案与密钥管理

1. 问题现象与背景解析上周五凌晨2点37分,我在给客户部署的Ubuntu 20.04 LTS服务器执行例行更新时,突然遭遇了经典的"Repository is not signed"报错。这个看似简单的错误提示背后,实际上涉及Linux系统包管理的安全机制核心逻辑。当…

2026/7/24 10:43:49

AI智能鞋柜:足部健康监测与预警系统设计

1. 项目概述:当鞋柜遇上AI健康管家去年帮朋友改造智能家居时,偶然发现他的鞋柜里藏着三双同款运动鞋——原来是为了轮流穿着避免足底筋膜炎复发。这个细节让我意识到,普通人对足部健康的认知往往停留在"鞋子合脚"的层面&#xff0c…

2026/7/24 10:43:49

CIFAR-10图像分类实战:SVM与CNN算法对比

1. 实验背景与目标解析计算机视觉领域的图像分类任务一直是学术界和工业界关注的重点方向。重庆理工大学计算机视觉方向的这次实验,选择了经典的CIFAR-10数据集作为实验对象,通过实现SVM和CNN两种不同的分类算法,让学生深入理解图像分类的基本…

2026/7/24 10:43:49

基于YOLOv8的蜜蜂识别系统开发与实践

1. 项目概述:蜜蜂识别检测系统的技术实现这个基于YOLOv8的蜜蜂识别系统,是我在农业智能化领域的一次技术实践。系统通过深度学习算法自动识别监控画面中的蜜蜂个体,为蜂农提供蜂群活动监测的自动化解决方案。相比传统人工观察方式&#xff0c…

2026/7/24 10:38:48

数字人推荐:企业产品讲解视频怎么做

数字人推荐:企业产品讲解视频怎么做 企业做产品讲解视频,最常见的困难不是没有产品卖点,而是没人愿意持续出镜、脚本总是写得像说明书、剪辑发布流程太慢。所以很多团队问“数字人推荐”时,真正想解决的是:怎样用数字人…

2026/7/23 12:54:51

Unity与Python本地通信:基于Flask的跨语言数据交换实战

1. 项目概述:为什么我们需要一个本地通信服务器?在游戏开发、数字孪生、仿真训练等众多领域,Unity作为强大的实时3D内容创作平台,其核心逻辑通常由C#驱动。然而,当我们需要进行复杂的数据分析、机器学习推理、科学计算…

2026/7/24 0:03:10

不同品牌斜齿行星减速机如何替换?以PX与PAG系列为例

不同品牌斜齿行星减速机如何替换?以 PX 与 PAG 系列为例 一、系列对应不等于型号直接互换 PX 与 PAG 都属于斜齿、方法兰、输出轴式精密行星减速机,结构形式和应用方向具有对应关系。 原设备使用PX系列时,可以优先从PAG系列中寻找替换型号。但…

2026/7/24 0:03:10

jdk8 把list 扁平化成String 多个以逗号分隔

在 JDK 8 中&#xff0c;将 List 扁平化为以逗号分隔的 String&#xff0c;有几种非常简洁且高效的方法。&#x1f680; 推荐方案&#xff1a;使用 Collectors.joining()这是最标准的 Java 8 写法&#xff0c;适用于 List<String>。javaimport java.util.stream.Collecto…

2026/7/24 0:03:10

java 两个 long id 怎么合并成一个long id 并且不重复

“把两个 Long ID 合并成一个唯一的 Long ID&#xff0c;且保证不重复”这个需求&#xff0c;在 Java 里直接做数学上的“完美合并”是不可能的。因为两个 Long&#xff08;各 64 位&#xff09;要合并成一个 Long&#xff08;64 位&#xff09;&#xff0c;在信息论上是有损压…

2026/7/23 23:42:43

3个高效策略:快速掌握Axure中文界面配置

3个高效策略&#xff1a;快速掌握Axure中文界面配置 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure RP的英文界面感…