第二十课:HarmonyOS Next异步编程实战:Promise与async/await深度解析

一、异步编程核心概念

HarmonyOS Next基于ArkTS的‌单线程模型‌实现高效异步编程,通过Promise与async/await解决传统回调地狱问题,提升代码可维护性‌

其核心优势包括:

  1. ‌非阻塞执行‌:异步任务挂起后主线程继续响应UI操作‌
  2. ‌简化并发逻辑‌:链式调用替代多层嵌套回调‌
  3. ‌统一错误处理‌:通过catch或try/catch集中管理异常‌

二、Promise核心用法

1. 状态与基本语法

Promise包含三种状态:

‌Pending‌:异步操作进行中‌

‌Fulfilled‌:任务成功完成‌

‌Rejected‌:任务执行失败‌

代码示例:创建Promise对象

javascript 复制代码
const fetchData = new Promise<string>((resolve, reject) => {  
  setTimeout(() => {  
    const success = Math.random() > 0.5;  
    success ? resolve('数据加载成功') : reject('请求超时');  
  }, 1000);  
});  

fetchData  
  .then(result => console.log(result))  
  .catch(error => console.error(error));  

2. 链式调用与错误处理

通过.then()串联多个异步任务,避免回调嵌套:

css 复制代码
// 模拟用户登录流程  
login(userId: string)  
  .then(token => getUserInfo(token))  
  .then(info => saveLocalStorage(info))  
  .catch(error => showToast('流程失败:' + error));  

三、async/await进阶开发

1. 基础语法与执行流程

‌async标记函数‌:声明异步函数隐式返回Promise‌37

‌await暂停执行‌:等待Promise完成后再继续后续代码‌36

代码示例:网络请求封装

vbnet 复制代码
async function loadUserData() {  
  try {  
    const token = await fetchToken();  
    const data = await fetchUserInfo(token);  
    return processData(data);  
  } catch (error) {  
    console.error('加载失败:', error);  
    throw error;  
  }  
}  

2. 并发执行优化

使用Promise.all提升多个独立任务的执行效率:

javascript 复制代码
// 并行加载图片与配置  
async function initApp() {  
  const [images, config] = await Promise.all([  
    fetchImageList(),  
    loadAppConfig()  
  ]);  
  // 合并结果后渲染  
}  

四、异步数据加载实战

1. 网络请求场景

封装HTTP请求模块实现统一拦截:

javascript 复制代码
async function safeFetch(url: string) {  
  const response = await fetch(url);  
  if (!response.ok) throw new Error(`HTTP ${response.status}`);  
  return response.json();  
}  

// 使用示例  
async function loadNews() {  
  const news = await safeFetch('https://api.example.com/news');  
  updateUI(news);  
}  

2. 文件读写场景

结合@ohos.fileio实现异步文件操作:

javascript 复制代码
async function writeLog(message: string) {  
  const filePath = 'logs/app.log';  
  try {  
    await fileio.writeText(filePath, message + '\n', { append: true });  
  } catch (e) {  
    console.error('日志写入失败:', e);  
  }  
}  
相关推荐
woshihuanglaoshi2 小时前
鸿蒙技术进阶全景高级成长体系:从初中级到架构师的技能树/学习路径/项目实战/认证体系系统性方法论
学习·华为·harmonyos
轻口味3 小时前
端侧 AI 赋能鸿蒙版 Obsidian:轻规划基于 HarmonyOS 7.0 图像超分特性的体验突破与开发实战
人工智能·华为·harmonyos·鸿蒙
OH_TPC5 小时前
【鸿蒙优选三方库】@ohos/lottie:让 After Effects 动画在 HarmonyOS 上稳定播放
华为·harmonyos·鸿蒙
李蚊子6 小时前
鸿蒙应用开发实践与上架复盘
harmonyos
2501_919749037 小时前
华为鸿蒙训练口才APP—小羊口才
华为·harmonyos·鸿蒙
大锅盖17 小时前
HarmonyOS 摄像头焦点管理的完整工程实现
华为·harmonyos
woshihuanglaoshi9 小时前
鸿蒙老旧项目升级改造高级:API废弃迁移/ArkTS语法升级/架构重构策略/增量迁移/风险管控方案
学习·华为·重构·架构·harmonyos·鸿蒙
星空真迷人1 天前
嵌入式鸿蒙并非精简版,核心究竟是什么?
stm32·单片机·嵌入式硬件·物联网·华为·harmonyos·iot
OH_TPC1 天前
【鸿蒙优选三方库】@ohos/ijkplayer:在鸿蒙上像 B 站一样流畅播视频
华为·音视频·harmonyos·鸿蒙
2501_919749031 天前
华为鸿蒙经期记录APP—小羊月经
华为·harmonyos·鸿蒙