鸿蒙开发 四十七 Promise async await

1、Promise是接口


鸿蒙sdk提供的ProPromise版本有点多,是泛型接口,用interface修饰,官网给出的解释是“Represents the completion of an asynchronous operation”,翻译大概意思是:异步操作的完成的处理,总共两回调方法then和catch,api如下:

 2、Promise有构造函数PromiseConstructor

鸿蒙提供的sdk源码结构如有:interface修饰的PromiseConstructor

readonly修饰的属性prototype,类型是是:Promise<any>

new 方法,创建一个新的Promise,两个回调函数作为参数,代码结构如下:

### 鸿蒙系统中 `async/await` 的异步编程机制 在鸿蒙系统中,`async/await` 是一种基于 `Promise` 的语法糖,用于简化异步代码的编写。它允许开发者以同步的方式编写异步逻辑,从而提高代码的可读性和维护性[^2]。 #### 1. `async/await` 的基本原理 `async/await` 的核心是通过 `Promise` 实现异步操作的挂起与恢复。当使用 `await` 关键字时,程序会暂停当前异步函数的执行,直到等待的 `Promise` 被解析或拒绝[^4]。解析完成后,程序将继续执行后续代码。 ```typescript async function fetchData(): Promise<void> { try { const result: string = await new Promise((resolve: Function) => { resolve('Data fetched successfully'); }); console.log(result); // 输出: Data fetched successfully } catch (e) { console.error(`Error occurred: ${e}`); } } fetchData(); ``` #### 2. 异常处理 在 `async/await` 中,可以通过 `try...catch` 块捕获异步操作中的异常。如果 `Promise` 被拒绝,则会在 `catch` 块中被捕获并处理[^3]。 ```typescript async function fetchWithError(): Promise<void> { try { const result: string = await new Promise((resolve, reject) => { reject('An error occurred'); }); } catch (e) { console.error(`Caught exception: ${e}`); // 输出: Caught exception: An error occurred } } fetchWithError(); ``` #### 3. 并发执行 虽然 `async/await` 通常用于按顺序执行异步任务,但也可以通过将多个 `Promise` 存储到数组中并使用 `Promise.all` 来实现并发执行[^5]。 ```typescript async function fetchMultipleData(): Promise<void> { const promises = [ new Promise((resolve) => setTimeout(() => resolve('Data 1'), 1000)), new Promise((resolve) => setTimeout(() => resolve('Data 2'), 2000)) ]; const results = await Promise.all(promises); console.log(results); // 输出: ['Data 1', 'Data 2'] } fetchMultipleData(); ``` #### 4. 在鸿蒙系统中的应用 在鸿蒙系统中,`async/await` 常用于处理网络请求、文件读写、数据库操作等耗时任务。这些任务可以通过 `Promise` 封装,并结合 `async/await` 提高代码的清晰度和可维护性。 ```typescript // 网络请求示例 async function fetchNetworkData(url: string): Promise<string> { return new Promise((resolve, reject) => { // 模拟网络请求 setTimeout(() => { if (url === 'success') { resolve('Network data received'); } else { reject('Network request failed'); } }, 1000); }); } async function handleRequest(): Promise<void> { try { const data = await fetchNetworkData('success'); console.log(data); // 输出: Network data received } catch (e) { console.error(e); // 输出: Network request failed } } handleRequest(); ``` --- ### 注意事项 - `async` 函数总是返回一个 `Promise`,即使函数内部没有显式返回值。 - 使用 `await` 时,必须将其放在 `async` 函数内部,否则会导致语法错误[^3]。 - 如果需要同时执行多个异步任务,应避免直接使用多个 `await`,而是考虑使用 `Promise.all` 或 `Promise.race`[^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值