相关问题
ArkTS 的异步编程模型是如何实现的?
70浏览 • 0回复 待解决
如何实现ArkTS高性能编程?
400浏览 • 1回复 待解决
#鸿蒙通关秘籍# HarmonyOS NEXT中的ArkTS如何进行异步编程?
61浏览 • 1回复 待解决
如何选择鸿蒙App开发的编程语言
6950浏览 • 2回复 待解决
在ArkTS中,如何合理使用异步编程模型来避免UI线程阻塞?
597浏览 • 1回复 待解决
操作系统对TS文件开发后续还支持吗?基础库实现基于TS实现后续能否兼容?
2039浏览 • 1回复 待解决
HarmonyOS 关于NAPI开发C层实现异步化回调问题
427浏览 • 1回复 待解决
OpenHarmony idl如何实现异步回调?
4572浏览 • 1回复 待解决
如何实现TaskPool异步任务支持串行队列
266浏览 • 1回复 待解决
api8如何实现异步线程跳转页面?
2646浏览 • 1回复 待解决
如何实现Java或者TS Reflect的反射功能
413浏览 • 1回复 待解决
鸿蒙OS的方舟编译器是如何提升开发效率的,它支持哪些编程语言?
51浏览 • 0回复 待解决
使用ts开发而非ets开发对应用有什么影响
639浏览 • 1回复 待解决
在ts中发现UI卡顿严重,需要使用异步多线程任务
1783浏览 • 1回复 待解决
系统兼容TS语言进行开发,目前是哪个TS版本?后续会更新TS和JS的新特性吗
1954浏览 • 1回复 待解决
使用NAPI扩展TS接口时如何使用env方式实现?
381浏览 • 1回复 待解决
HarmonyOS 如何看d.ts里面方法的源码实现
334浏览 • 1回复 待解决
动态import是异步的,同步和异步场景如何使用
261浏览 • 0回复 待解决
ArkUI的ts开发范式中资源引用函数r如何转化类型?
5813浏览 • 1回复 待解决
为什么选用Ts/ArkTS作为开发语言 ,而不是java?
834浏览 • 1回复 待解决
ts 声明式开发不能使用js的getApp()
4333浏览 • 1回复 待解决
module需要同时导出ts和ets类型的符号如何实现?
1697浏览 • 1回复 待解决
编程烧录,需要什么软件?
4105浏览 • 1回复 待解决
HarmonyOS ArkTS开发中,异步回调,怎么切到主线程执行呢
504浏览 • 1回复 待解决
卡片开发中如何实现数据持久化
1995浏览 • 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()函数。