当前位置: 代码网 > it编程>编程语言>Javascript > 鸿蒙ArkTS实战开发:异步并发 (Promise和async/await)

鸿蒙ArkTS实战开发:异步并发 (Promise和async/await)

2024年07月31日 Javascript 我要评论
Promise和async/await提供异步并发能力,是标准的JS异步语法。

promise和async/await提供异步并发能力,是标准的js异步语法。异步代码会被挂起并在之后继续执行,同一时间只有一段代码执行,适用于单次i/o任务的场景开发,例如一次网络请求、一次文件读写等操作。

异步语法是一种编程语言的特性,允许程序在执行某些操作时不必等待其完成,而是可以继续执行其他操作。

promise

promise是一种用于处理异步操作的对象,可以将异步操作转换为类似于同步操作的风格,以方便代码编写和维护。promise提供了一个状态机制来管理异步操作的不同阶段,并提供了一些方法来注册回调函数以处理异步操作的成功或失败的结果。

promise有三种状态:pending(进行中)、fulfilled(已完成)和rejected(已拒绝)。promise对象创建后处于pending状态,并在异步操作完成后转换为fulfilled或rejected状态。

最基本的用法是通过构造函数实例化一个promise对象,同时传入一个带有两个参数的函数,通常称为executor函数。executor函数接收两个参数:resolve和reject,分别表示异步操作成功和失败时的回调函数。例如,以下代码创建了一个promise对象并模拟了一个异步操作:

const promise: promise<number> = new promise((resolve: function, reject: function) => {
settimeout(() => {
  const randomnumber: number = math.random();
  if (randomnumber > 0.5) {
    resolve(randomnumber);
  } else {
    reject(new error('random number is too small'));
  }
}, 1000);
})

上述代码中,settimeout函数模拟了一个异步操作,并在1秒钟后随机生成一个数字。如果随机数大于0.5,则执行resolve回调函数并将随机数作为参数传递;否则执行reject回调函数并传递一个错误对象作为参数。

promise对象创建后,可以使用then方法和catch方法指定fulfilled状态和rejected状态的回调函数。then方法可接受两个参数,一个处理fulfilled状态的函数,另一个处理rejected状态的函数。只传一个参数则表示状态改变就执行,不区分状态结果。使用catch方法注册一个回调函数,用于处理“失败”的结果,即捕获promise的状态改变为rejected状态或操作失败抛出的异常。例如:

import { businesserror } from '@ohos.base';

promise.then((result: number) => {
 console.info(`random number is ${result}`);
}).catch((error: businesserror) => {
 console.error(error.message);
});

上述代码中,then方法的回调函数接收promise对象的成功结果作为参数,并将其输出到控制台上。如果promise对象进入rejected状态,则catch方法的回调函数接收错误对象作为参数,并将其输出到控制台上。

async/await

async/await是一种用于处理异步操作的promise语法糖,使得编写异步代码变得更加简单和易读。通过使用async关键字声明一个函数为异步函数,并使用await关键字等待promise的解析(完成或拒绝),以同步的方式编写异步操作的代码。

async函数是一个返回promise对象的函数,用于表示一个异步操作。在async函数内部,可以使用await关键字等待一个promise对象的解析,并返回其解析值。如果一个async函数抛出异常,那么该函数返回的promise对象将被拒绝,并且异常信息会被传递给promise对象的onrejected()方法。

下面是一个使用async/await的例子,其中模拟了一个异步操作,该操作会在3秒钟后返回一个字符串。

async function myasyncfunction(): promise<void> {
  const result: string = await new promise((resolve: function) => {
    settimeout(() => {
      resolve('hello, world!');
    }, 3000);
  });
  console.info(result); // 输出: hello, world!
}

myasyncfunction();

在上述示例代码中,使用了await关键字来等待promise对象的解析,并将其解析值存储在result变量中。

需要注意的是,由于要等待异步操作完成,因此需要将整个操作包在async函数中。除了在async函数中使用await外,还可以使用try/catch块来捕获异步操作中的异常。

async function myasyncfunction(): promise<void> {
  try {
    const result: string = await new promise((resolve: function) => {
      resolve('hello, world!');
    });
  } catch (e) {
    console.error(`get exception: ${e}`);
  }
}

myasyncfunction();

最后

有很多小伙伴不知道学习哪些鸿蒙开发技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?而且学习时频繁踩坑,最终浪费大量时间。所以有一份实用的鸿蒙(harmonyos next)资料用来跟着学习是非常有必要的。 

为了能够帮助大家快速掌握鸿蒙(harmonyos next)应用开发技术知识。在此给大家分享一下我结合鸿蒙最新资料整理出来的鸿蒙南北向开发学习路线以及整理的最新版鸿蒙学习文档资料。

这份鸿蒙(harmonyos next)资料包含了鸿蒙开发必掌握的核心知识要点,内容包含了arkts、arkui开发组件、stage模型、多端部署、分布式应用开发、音频、视频、webgl、openharmony多媒体技术、napi组件、openharmony内核、harmony南向开发、鸿蒙项目实战等等)鸿蒙(harmonyos next)技术知识点。

希望这一份鸿蒙学习资料能够给大家带来帮助,有需要的小伙伴自行领取,限时开源,先到先得~无套路领取!!

如果你是一名有经验的资深android移动开发、java开发、前端开发、对鸿蒙感兴趣以及转行人员,可以直接领取这份资料

 获取这份完整版高清学习路线,请点击→纯血版全套鸿蒙harmonyos学习资料

鸿蒙(harmonyos next)最新学习路线

  •  harmonos基础技能

  • harmonos就业必备技能 
  •  harmonos多媒体技术

  • 鸿蒙napi组件进阶

  • harmonos高级技能

  • 初识harmonos内核 
  • 实战就业级设备开发

 有了路线图,怎么能没有学习资料呢,小编也准备了一份联合鸿蒙官方发布笔记整理收纳的一套系统性的鸿蒙(openharmony )学习手册(共计1236页)鸿蒙(openharmony )开发入门教学视频,内容包含:arkts、arkui、web开发、应用模型、资源分类…等知识点。

获取以上完整版高清学习路线,请点击→纯血版全套鸿蒙harmonyos学习资料

《鸿蒙 (openharmony)开发入门教学视频》

《鸿蒙生态应用开发v2.0白皮书》

图片

《鸿蒙 (openharmony)开发基础到实战手册》

openharmony北向、南向开发环境搭建

图片

 《鸿蒙开发基础》

  • arkts语言
  • 安装deveco studio
  • 运用你的第一个arkts应用
  • arkui声明式ui开发
  • .……

图片

 《鸿蒙开发进阶》

  • stage模型入门
  • 网络管理
  • 数据管理
  • 电话服务
  • 分布式应用开发
  • 通知与窗口管理
  • 多媒体技术
  • 安全技能
  • 任务管理
  • webgl
  • 国际化开发
  • 应用测试
  • dfx面向未来设计
  • 鸿蒙系统移植和裁剪定制
  • ……

图片

《鸿蒙进阶实战》

  • arkts实践
  • uiability应用
  • 网络案例
  • ……

图片

 获取以上完整鸿蒙harmonyos学习资料,请点击→纯血版全套鸿蒙harmonyos学习资料

总结

总的来说,华为鸿蒙不再兼容安卓,对中年程序员来说是一个挑战,也是一个机会。只有积极应对变化,不断学习和提升自己,他们才能在这个变革的时代中立于不败之地。 

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com