async/await呢?
时间: 2025-06-07 07:49:21 浏览: 19
### 鸿蒙系统中 `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]。
---
阅读全文
相关推荐

















