DEV Community

SameX
SameX

Posted on

鸿蒙编程江湖:异步编程的优势及 Promise的应用

本文旨在深入探讨华为鸿蒙HarmonyOS Next系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。

异步编程是指编写能够同时执行多个任务,并且不会阻塞主线程的代码。异步编程可以有效地提高应用程序的响应速度和效率,并避免耗时任务阻塞主线程,导致应用程序卡顿。
Promise 是 JavaScript 中用于处理异步操作的通用模式,它允许开发者以更简洁的方式编写异步代码。

Promise 的定义与使用

Promise 定义
Promise 是一个对象,它代表了异步操作的结果。Promise 有三种状态:pending(进行中)、fulfilled(已完成)和 rejected(已拒绝)。
Promise 使用

  • 创建 Promise
const promise = new Promise((resolve, reject) => {
  // 异步操作的代码
});
Enter fullscreen mode Exit fullscreen mode
  • 使用 then 方法
promise.then((result) => {
  // 处理成功的回调
}).catch((error) => {
  // 处理失败的回调
});
Enter fullscreen mode Exit fullscreen mode
  • 使用 async/await
async function myAsyncFunction() {
  const result = await promise;
  // 处理结果
}
Enter fullscreen mode Exit fullscreen mode

async/await 在 ArkTS 中的异步处理

ArkTS 支持使用 async/await 语法进行异步处理。async/await 是一种更简洁的异步编程方式,它使得异步代码看起来更像是同步代码。
示例

async function myAsyncFunction() {
  const result = await new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve('Hello, world!');
    }, 3000);
  });
  console.log(result);
}
Enter fullscreen mode Exit fullscreen mode

async/await 注意事项

  • async 函数必须返回一个 Promise 对象。
  • await 关键字只能用在 async 函数内部。 ### 错误处理与性能优化 错误处理
  • 使用 Promise 的 catch 方法捕获错误。
  • 使用 try/catch 块捕获异步操作中的异常。 性能优化
  • 避免在异步操作中执行耗时操作。
  • 使用 Promise.all 方法并行执行多个异步操作。 ### 多个 Promise 并行执行与错误捕获的代码示例 以下是一个简单的示例,演示如何在鸿蒙中使用 Promise 和 async/await 并行执行多个异步操作,并捕获错误:
import { taskpool } from '@kit.ArkTS';
@Concurrent
function add(num1: number, num2: number): number {
  return num1 + num2;
}
@Concurrent
function subtract(num1: number, num2: number): number {
  return num1 - num2;
}
async function concurrentFunc() {
  try {
    const task1 = new taskpool.Task(add, 1, 2);
    const task2 = new taskpool.Task(subtract, 3, 4);
    const results = await Promise.all([taskpool.execute(task1), taskpool.execute(task2)]);
    console.log(results); // 打印结果数组
  } catch (e) {
    console.error("Error: " + e);
  }
}
@Entry
@Component
struct Index {
  @State message: string = 'Hello World';
  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
          .onClick(() => {
            concurrentFunc();
          })
          .width('100%');
      }
    }
    .height('100%');
  }
}
Enter fullscreen mode Exit fullscreen mode

这段代码定义了一个名为 Index 的组件,并在组件中显示了一条文本消息 "Hello World"。点击按钮会执行 concurrentFunc 函数,该函数创建两个并发任务并并行执行它们。任务完成后,会在控制台输出结果数组。如果发生错误,会捕获错误并打印错误信息。

总结

通过以上介绍,您可以了解到鸿蒙系统中异步编程的两种方式:Promise 和 async/await。使用异步编程可以有效地提高应用程序的响应速度和效率,并避免耗时任务阻塞主线程。希望本文能够帮助您掌握鸿蒙系统中的异步编程技术,并开发出更优秀的鸿蒙应用。

Top comments (0)