我可以: 邀请好友来看>>
ZOL星空(中国) > 软件星空(中国) > 星空(中国)综合 > 业界资讯星空(中国) > 鸿蒙开发:异步并发操作
帖子很冷清,卤煮很失落!求安慰
返回列表
签到
手机签到经验翻倍!
快来扫一扫!

鸿蒙开发:异步并发操作

16浏览 / 0回复

vrn0hn

vrn0hn

0
精华
169
帖子

等  级:Lv.5
经  验:4111
  • Z金豆: 638

    千万礼品等你来兑哦~快点击这里兑换吧~

  • 城  市:
  • 注  册:2024-03-26
  • 登  录:2025-05-30
发表于 2025-05-26 11:26:34
电梯直达 确定
楼主

前言

所谓异步,说白了,就是不必等到上一个的执行结果,我们就可以继续执行下一个操作,相对于同步而言,异步操作可以同时处理多个任务,不会因为一个任务的耗时而影响其他任务的执行,从而提高了程序的并发处理能力?,在实际的开发中,特别是应用启动初始化的时候,为了不阻塞程序,异步的初始化往往是开发中的首选,在鸿蒙当中,我们如何进行异步的并发操作呢?使用系统提供的Promise和async/await便可以轻松搞定。

简单案例

使用setTimeout函数模拟了一个异步操作。

private getMessage(): Promise {     
return new Promise((resolve: Function) => {       
setTimeout(() => {         
resolve("===1秒之后打印")       }, 1000)     })   }

书写执行逻辑

console.log("===调用前打印") this.getMessage().then((result) => {         
console.log(result) }) console.log("===调用后打印")

由于getMessage方法是一个异步操作,打印的情况如下,从以上的模拟代码,就印证了开头所说的,异步不回阻塞下面的程序执行。

鸿蒙开发:异步并发操作

本文简单从以下三个方向概述:

1、什么是 Promise

2、异步回调接收成功和失败

3、结合async/await进行使用

4、相关总结

一、什么是Promise

首先,Promise它是一种用于处理异步操作的对象,并且提供了一个状态机制来管理异步操作的不同阶段,使用Promise有两个特点,第一个特点,它可以结合async/await,将异步操作转换为类似于同步操作的风格,第二个特点就是,正常的异步操作,使用回调函数来处理成功或失败的结果。

Promise提供了三种状态,当Promise对象创建后处于pending(进行中)状态,并在异步操作完成后转换为fulfilled(已完成)或rejected(已拒绝)状态,具体的简单案例如下:

promise.then((result) => {   
//结果 }).catch((error: BusinessError) => {   
//错误 });

二、异步回调接收成功和失败

异步的回调,主要使用then方法来接收结果,catch方法回调失败结果,如上面的案例一样,需要说明的是then方法可以接收一个参数,也可以接收两个参数,一个参数,表示当Promise对象状态变为fulfilled时,then方法会自动调用这个回调函数,两个参数时,一个处理fulfilled状态的函数,另一个处理rejected状态的函数。

promise.then((result) => {   
//结果 }).catch((error: BusinessError) => {   
//错误 });

大家可以去官方api查看,大部分的方法,或多或少都提供了这种方式的操作,比如网络请求,比如数据库操作,等等,可以说司空见惯。

鸿蒙开发:异步并发操作

三、结合async/await进行使用

async/await是一种用于处理异步操作的Promise语法糖,正如上面所说的,结合使用,可以将异步操作转换为类似于同步操作的风格,比如前言中的案例中,我们使用async/await,简单改造一下:

Typescripq体验AI代码助手代码解读复制代码  private async printLog() {     console.log("===调用前打印")     let message = await this.getMessage() //获取消息     console.log(message)     console.log("===调用后打印")   }

以上的代码改为async/await形式后,打印日志如下:

鸿蒙开发:异步并发操作

可以清晰的发现,最后的打印,在等待上一个结束完后再执行,这就实现了同步操作。

async函数是一个返回Promise对象的函数,用于表示一个异步操作,在其内部,可以使用await关键字等待一个Promise对象的解析,然后再返回其解析的结果,如果抛出异常,最终会传递给Promise对象的onRejected()方法。

四、相关总结

在结合async/await进行使用的时候,有一点需要注意,await关键字必须结合async,这两个是搭配使用的,缺一不可,同步风格在使用的时候,如何获取到错误呢,毕竟没有catch方法,其实,我们可以自己创建try/catch来捕获异常。

 private async printLog() {     
 try {       
 console.log("===调用前打印")       
 let message = await this.getMessage() //获取消息       
 console.log(message)      
  console.log("===调用后打印")     
  } catch (e) {       
  console.error("===异常信息:" + e);     }   }


作者:程序员一鸣
来源:稀土掘金


高级模式
星空(中国)精选大家都在看24小时热帖7天热帖大家都在问最新回答

针对ZOL星空(中国)您有任何使用问题和建议 您可以 联系星空(中国)管理员查看帮助  或  给我提意见

快捷回复 APP下载 返回列表