相关问题
如何选择鸿蒙App开发的编程语言
5830浏览 • 2回复 待解决
OpenHarmony idl如何实现异步回调?
3214浏览 • 1回复 待解决
操作系统对TS文件开发后续还支持吗?基础库实现基于TS实现后续能否兼容?
634浏览 • 1回复 待解决
api8如何实现异步线程跳转页面?
1169浏览 • 1回复 待解决
在ts中发现UI卡顿严重,需要使用异步多线程任务
594浏览 • 1回复 待解决
使用ts开发而非ets开发对应用有什么影响
254浏览 • 1回复 待解决
系统兼容TS语言进行开发,目前是哪个TS版本?后续会更新TS和JS的新特性吗
675浏览 • 1回复 待解决
module需要同时导出ts和ets类型的符号如何实现?
539浏览 • 1回复 待解决
如何选择使用同步接口还是异步接口
612浏览 • 1回复 待解决
如何对异步方法进行插桩/替换
274浏览 • 1回复 待解决
ArkUI的ts开发范式中资源引用函数r如何转化类型?
4192浏览 • 1回复 待解决
ts 声明式开发不能使用js的getApp()
3106浏览 • 1回复 待解决
为什么选用Ts/ArkTS作为开发语言 ,而不是java?
329浏览 • 1回复 待解决
编程烧录,需要什么软件?
2648浏览 • 1回复 待解决
HarmonyOS编程如何获取手机信息的基站小区Cell值,麻烦帮帮忙!谢谢
4816浏览 • 1回复 已解决
如何在Native侧调用ArkTS侧异步方法,并获取异步计算结果到Native侧
840浏览 • 1回复 待解决
openHarmony基于C++的编程规范检测工具是否有
1061浏览 • 1回复 待解决
消息摘要计算这种类似加解密框架算法全是异步调用的,如何实现同步调用
527浏览 • 1回复 待解决
有输入法编程接口吗?
3472浏览 • 1回复 待解决
Mac下有什么好的编程字体?
1103浏览 • 1回复 待解决
ArkTs中异步方法如何转变成同步方法
589浏览 • 0回复 待解决
js 怎么开启异步线程?
4736浏览 • 1回复 待解决
鸿蒙是否进行异步通信?
2592浏览 • 1回复 待解决
worker.ts中如何获取context
677浏览 • 2回复 待解决
【求助】harmonyOS 纯ts如何实现通过跳转网页的方式打开固定链接?
3069浏览 • 1回复 待解决
介绍
js是单线程模型,执行引擎需要一件一件去处理任务,类似生活中的排队。但是队列中某个任务需要花费很多时间,就会导致后面的任务都将处于一种等待状态,甚至会出现页面假死现象,严重影响用户操作体验。
针对以上阻塞问题,我们可以使用异步编程来解决。
异步模式下,每个异步任务都有自己的一个或者多个回调函数,这样当前在执行的异步任务执行完后,不会马上执行事件队列中的下一项任务,而是执行它的回调函数。而下一项任务也不会等这个回调函数执行完,因为它不能确定当前的回调函数何时执行完毕,只要它被触发就会执行。
原理
主线程中的所有代码按照顺序依次执行,遇到同步便直接执行,遇到异步,先在Event Table中注册异步(这些操作无需花费多少时间),等异步操作的结果出来了,就把回调函数注册到事件队列。
js事件执行机制中有一个轮询的特点,即事件循环机制:主线程中的代码按照顺序依次,等到主线程空了,就把事件队列中要执行的回调函数放入主线程中,然后同步的执行。对于代码中的异步操作,先在Event Table中注册,等异步操作的结果出来了,就把回调函数注册到事件队列。
实现
例如:文件管理中的文件打开open接口都提供了3个形式,1个同步,2个异步,异步接口分别对应CallBack形式和Promis形式。
同步
以同步方法打开文件。
使用示例:
说明:
接口调用后阻塞线程,直到文件描述符fd通过函数返回值获取,然后程序再向下执行。
异步回调CallBack
打开文件,使用callback异步回调。
使用示例:
说明:
函数第四个参数是一个function函数,function函数是一个异步任务,会加入到事件队列,文件描述符fd通过function的函数参数获取。
接口调用后不阻塞线程,程序可以继续向下执行,待主线程的任务执行完成,就开始执行异步任务。
异步期约Promise
打开文件,使用Promise异步回调。
说明:
与Callback一样是异步编程,但是文件描述符返回是通过promise的.then()函数返回,与Callback写法不一样。
接口调用后不阻塞线程,程序可以继续向下执行,待主线程的任务执行完成,就开始执行异步任务,接口执行成功则执行.then()函数,失败执行.catch()函数。