您现在的位置是:首页 > Javascript
当前栏目
javascript编程单线程之异步模式Asynchronous
2023-02-18 16:42:49 时间
异步模式Asynchronous
不会等待这个任务结束才开始执行下一个任务,开启之后立即执行下一个任务,后续逻辑一般会通过回调函数的方式定义,异步模式对js 非常重要,没有异步任务单线程的 js 语言就无法同时处理大量耗时任务,单线程下面的异步最大的难点就是 代码的执行顺序混乱
,Queue
是消息队列队列也叫回调队列
打印消息给同步一样执行压栈弹栈,接下来就是倒计时器,setTimeOut
就是调用了web api
,web api
单独运行不会阻塞js
的执行, 开启倒计时器之后 setTimeOut
的调用就已经结束,会继续往下调用,同理压栈开启倒计时器弹栈,最后打印消息之后对于这个匿名函数就已经调用完了,这个时候我们的调用栈就会被清空掉,当调用栈执行完之后,Evevt loop
就会从消息队列中取出第一个回调函数压入到调用栈,当倒计时器达到时间之后就会把回调函数放入到回调队列中。timer2
倒计时先结束所以会先放入消息队列中的第一位, Evevt loop
监听到消息队列发生变化,就会把timer2
放入到执行栈中去执行,这个时候对于调用栈来说就是开启了新一轮的执行,如果执行栈中的函数又开启了定时器,这个时候给前面的步骤是一样的,不断的去加入消息队列,不断的去提取消息队列中的函数来执行,直到调用栈和消息队列中都没有需要执行的函数整体的代码就结束了,javascript
执行引擎就是先去执行调用栈中的任务,然后再通过事件循环从消息队列中再取一个任务执行,依次类推。我们随时都可以往消息队列放入任务,这些任务会排队执行。javascript
异步实现原理内部就是通过消息队列和时间循环实现的
回调函数
所有异步编程方案根基都是回调函数,由调用者定义,交给执行者去执行的函数叫做回调函数
function foo (callback) {
setTimeOut(() => {
callback()
}, 3000)
}
foo(() => {
console.log("恰饭饭")
})
相关文章
- 如何快速上手 angular.js
- Jmeter系列(8)- 参数化:JSON提取器、全局参数化、CSV文件导入
- JavaScript快速入门
- 初识jQuery
- 关于JavaScript0.1+0.2=?浮点数精度问题
- NanoDet:这是个小于4M超轻量目标检测模型
- JavaScript回调函数的高手指南
- 前端开发:4、JavaScript简介、变量与常量、数据类型及内置方法、运算符、流程控制、循环结构、内置方法
- Python基础之模块:3、os模块 sys模块 json模块 json实战
- filebeat收集日志到elsticsearch中并使用ingest node的pipeline处理
- 技巧收藏|10个JavaScript常用数组操作方法
- 即使不会node.js,拖拽就可完成数据的可视化展示
- 如何使用Node.js连接数据库
- 解决aspnetcore-browser-refresh.js:234 WebSocket connection to 'wss://localhost:62356/Admin/' failed问题
- APIJSON-实现一对一,一对多复杂查询
- APIJSON - 功能符、数组关键词、对象关键词、全局关键词简表速查
- 用Three.js构建三维世界的房子
- 手把手教你发布兼容TS的JS库到npmjs上
- POSTGRESQL 15 日志的JSON 格式 为什么用JSON 与 PG 14 没有注意的一些参数
- Python csv、xlsx、json、二进制(MP3) 文件读写基本使用