相关问题
ArkTS 的异步编程模型是如何实现的?
1034浏览 • 0回复 待解决
如何实现ArkTS高性能编程?
1229浏览 • 1回复 待解决
如何在鸿蒙开发中利用 ArkTS 进行高效的异步编程,例如处理网络请求和文件读写?
222浏览 • 0回复 待解决
如何在鸿蒙开发中利用 ArkTS 进行高效的异步编程,例如处理网络请求和文件读写?
270浏览 • 0回复 待解决
#鸿蒙通关秘籍# HarmonyOS NEXT中的ArkTS如何进行异步编程?
1226浏览 • 1回复 待解决
如何选择鸿蒙App开发的编程语言
7878浏览 • 5回复 待解决
如何利用 HarmonyOS 的异步编程模型(如 Future 和 Callback)优化 CPU 计算?
237浏览 • 0回复 待解决
在ArkTS中,如何合理使用异步编程模型来避免UI线程阻塞?
1778浏览 • 1回复 待解决
HarmonyOS ArkTS开发语言的编程规范
783浏览 • 1回复 待解决
如何在HarmonyOS应用中实现多线程编程?
285浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙开发中使用Promise模式实现异步操作?
1251浏览 • 2回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙开发中应用动态导入实现异步加载?
955浏览 • 1回复 待解决
操作系统对TS文件开发后续还支持吗?基础库实现基于TS实现后续能否兼容?
3020浏览 • 1回复 待解决
鸿蒙开发中如何处理异步操作?
372浏览 • 0回复 待解决
OpenHarmony idl如何实现异步回调?
6012浏览 • 1回复 待解决
HarmonyOS 关于NAPI开发C层实现异步化回调问题
1199浏览 • 1回复 待解决
#鸿蒙通关秘籍#使用Libuv实现鸿蒙开发的异步线程管理
1031浏览 • 1回复 待解决
如何实现TaskPool异步任务支持串行队列
1062浏览 • 1回复 待解决
仓颉编程语言也能开发手机APP吗?
510浏览 • 1回复 已解决
HarmonyOS 异步任务列表实现
532浏览 • 1回复 待解决
HarmonyOS 开发者如何自主判断是异步接口?
784浏览 • 1回复 待解决
api8如何实现异步线程跳转页面?
3805浏览 • 1回复 待解决
HarmonyOS 使用napi_load_module_with_info如何加载执行ts异步方法并获取返回值
582浏览 • 1回复 待解决
如何实现Java或者TS Reflect的反射功能
1319浏览 • 1回复 待解决
仓颉编程语言在鸿蒙开发中有何特性与优势?
296浏览 • 0回复 待解决
介绍
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()函数。