异步深度
- javascript是一门单线程语言
- Event Loop是javascript的执行机制
为什么要用异步?
由于js是单线程的。只能在js引擎的主线程上运行。所以js代码只能一行一行执行
。不能同一时间执行多个js代码任务。这导致如果有一段耗时长的计算活着ajax请求。
如果没有异步,就会产生用户等待时间长。这个时候由于任务没有完成,用户其他操作
都会没有响应
常见的异步模式
回调函数
事件监听
promise
。。。
js如何实现异步
js的事件循环机制
js解析的时候。会被引擎分为两大类任务,同步任务与异步任务
同步任务:被推到执行栈按顺序执行
异步任务:当其可以被执行时,会被放到任务队列,等待执行
当执行栈中所有同步执行完,js引擎就会到任务列表查看是否有任务存在,并将任务放在
执行栈执行,执行完又去任务列表检查是否有可执行任务。这种循环检查机制被称为事件循环机制。
Promise
Promise 是抽象异步处理对象以及对其进行各种操作的对象
简而言之,让异步变得好看
promise 是一个类
循环里处理异步
在Promise新建后会立即执行
它其中的回调函数会立即被放在微任务中 待同步函数执行完立即执行
优点:解决回调,链式调用,减少嵌套
缺点:无法抛出内部错误,新建立即执行无法取消,无法监测进行状态
javascript的执行和运行
执行和运行有很大的区别,javascript在不同的环境下,比如node,浏览器,Ringo等等,执行方式是不同的。而运行大多指javascript解析引擎,是统一的
微任务 promise process.nextTick 宏任务 setTimeout setInterval I/O script 同一次事件循环中 微任务永远在宏任务之前执行
本人是一个技术爱好者
1.但是每个技术爱好者都是从萌新开始的
2.我所有的博文都是我各方资料查阅(看的比较乱比较杂,因为有些是群里讨论等等来源,无法辨别出处,所以我的文章都是没有写明出处,都是我个人消化后整理,)
3.但是没有经过我实践的我一般会标注
4.希望大家共同交流共同进步,指出我的不足 谢谢