鸿蒙Promise对象,async和await

Promise

  1. 定义
    Promise源自JavaScript,它是处理异步操作的对象,可以把异步操作按同步操作的方式进行编码,便于代码维护。Promise本身具备管理异步操作的能力,这个能力是通过状态机制实现的。Promise的状态有3种,如下:
    1)pending状态
    Promise对象在创建后,处于pending状态。
    2)fulfilled状态
    当异步操作完成后,如果结果成功,Promise就变为fulfilled状态。
    3)rejected
    当异步操作完成,如果结果失败,Promise就变为rejected状态。

  2. 用法
    Promise的基本用法是,通过new创建,并在它的构造函数中,传入一个executor函数,该函数有两个参数,这个两个参数也是都是executor函数,分别是代表成功的resolve函数和代表失败的reject函数。在Promise构造函数中的executor函数里,用resolve和rejected处理成功和失败状态。样例代码如下:

const promise: Promise<number> = new Promise((resolve: Function,rejected: Function) => {
   
   
  setTimeout(() => {
   
   
    const randomNumber: number = Math.random()
    if(randomNumber > 0.5) {
   
   
      resolve(randomNumber)
    } else {
   
   
      rejected(new Error("Random number is too small."))
    
### 3.1 异步编程的结构选择 在实际项目中,应根据任务复杂度选择使用 `Promise` 或 `async/await`。对于简单的异步操作,例如单次网络请求或文件读取,直接使用 `Promise` 并通过 `.then()` `.catch()` 进行链式调用更为简洁[^1]。例如: ```typescript fetchData() .then(data => { console.log('Data received:', data); }) .catch(error => { console.error('Error fetching data:', error); }); ``` 而对于多个依赖性异步操作、需要与同步逻辑混合编写,或者涉及深层嵌套的回调结构时,使用 `async/await` 可以显著提高代码可读性维护性[^1]。例如: ```typescript async function processUser() { try { const user = await fetchUserById(123); const posts = await fetchPostsByUserId(user.id); console.log('User posts:', posts); } catch (error) { console.error('Failed to process user:', error); } } ``` ### 3.2 错误处理机制 统一的错误处理是提升代码健壮性的关键。在使用 `Promise` 时,每个 `.then()` 链都需要附加 `.catch()` 来捕获异常,否则可能导致未处理的拒绝(unhandled rejection)问题。相比之下,`async/await` 支持使用 `try/catch` 结构进行集中异常捕获,使逻辑更清晰且易于调试[^1]。 例如,在 `async/await` 中可以这样处理错误: ```typescript async function loadConfigAndStartApp() { try { const config = await fetchConfig(); startApplication(config); } catch (error) { console.error('Failed to load configuration:', error); fallbackToDefaultConfig(); } } ``` ### 3.3 模块化与并行执行 在模块化开发中,如果多个异步任务之间没有依赖关系,应尽量并行执行以提高性能。可以通过 `Promise.all()` 来同时触发多个异步操作,并等待它们全部完成[^1]。例如: ```typescript async function loadMultipleResources() { try { const [data1, data2] = await Promise.all([fetchResourceA(), fetchResourceB()]); console.log('Both resources loaded:', data1, data2); } catch (error) { console.error('One of the resources failed to load:', error); } } ``` 此外,在 HarmonyOS NEXT 中,顶层 `await` 已被支持,这意味着可以在模块导出前直接等待异步初始化任务完成,从而简化模块加载流程[^3]。例如: ```typescript // 模块文件 const config = await fetchConfig(); export const apiClient = createApiClient(config); ``` ### 3.4 性能优化与可维护性 尽管 `async/await` 提供了更直观的编码方式,但其本质仍是基于 `Promise` 实现的语法糖。因此,在性能敏感的场景下,合理控制异步任务的并发数量调度顺序至关重要。例如避免不必要的串行化操作,合理使用 `Promise.race()` 或 `Promise.allSettled()` 等方法来增强程序的响应能力[^2]。 为保持代码整洁,建议将复杂的异步逻辑封装成独立函数,并遵循单一职责原则。这不仅有助于单元测试,也能减少副作用带来的潜在问题。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值