相关问题
ArkTS 的异步编程模型是如何实现的?
189浏览 • 0回复 待解决
如何实现ArkTS高性能编程?
488浏览 • 1回复 待解决
如何选择鸿蒙App开发的编程语言
7035浏览 • 2回复 待解决
#鸿蒙通关秘籍# HarmonyOS NEXT中的ArkTS如何进行异步编程?
199浏览 • 1回复 待解决
在ArkTS中,如何合理使用异步编程模型来避免UI线程阻塞?
757浏览 • 1回复 待解决
操作系统对TS文件开发后续还支持吗?基础库实现基于TS实现后续能否兼容?
2168浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙开发中应用动态导入实现异步加载?
118浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙开发中使用Promise模式实现异步操作?
174浏览 • 2回复 待解决
#鸿蒙通关秘籍#使用Libuv实现鸿蒙开发的异步线程管理
84浏览 • 1回复 待解决
HarmonyOS 关于NAPI开发C层实现异步化回调问题
596浏览 • 1回复 待解决
OpenHarmony idl如何实现异步回调?
4794浏览 • 1回复 待解决
HarmonyOS 开发者如何自主判断是异步接口?
77浏览 • 1回复 待解决
如何实现TaskPool异步任务支持串行队列
368浏览 • 1回复 待解决
使用ts开发而非ets开发对应用有什么影响
735浏览 • 1回复 待解决
api8如何实现异步线程跳转页面?
2771浏览 • 1回复 待解决
如何实现Java或者TS Reflect的反射功能
549浏览 • 1回复 待解决
HarmonyOS 如何进行同步代码编程
54浏览 • 1回复 待解决
在ts中发现UI卡顿严重,需要使用异步多线程任务
1912浏览 • 1回复 待解决
系统兼容TS语言进行开发,目前是哪个TS版本?后续会更新TS和JS的新特性吗
2087浏览 • 1回复 待解决
鸿蒙OS的方舟编译器是如何提升开发效率的,它支持哪些编程语言?
193浏览 • 0回复 待解决
#鸿蒙通关秘籍#在鸿蒙开发中,如何处理异步操作错误?
140浏览 • 1回复 待解决
HarmonyOS 如何看d.ts里面方法的源码实现
454浏览 • 1回复 待解决
使用NAPI扩展TS接口时如何使用env方式实现?
493浏览 • 1回复 待解决
ArkUI的ts开发范式中资源引用函数r如何转化类型?
5982浏览 • 1回复 待解决
HarmonyOS Kotlin编程语言IntArray咨询
48浏览 • 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()函数。