博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
3、异步编程-JS种事件队列的优先级
阅读量:6761 次
发布时间:2019-06-26

本文共 1151 字,大约阅读时间需要 3 分钟。

一、任务队列 > 事件循环(onclick、settimeout)之上

在JS中ES6 中新增的任务队列(promise)是在事件循环(onclick、settimeout、ajax)之上的,事件循环每次 tick 后会查看 ES6 的任务队列中是否有任务要执行,也就是 ES6 的任务队列比事件循环中的任务(事件)队列优先级更高。

如 Promise 就使用了 ES6 的任务队列特性。也即在执行完任务栈后首先执行的是任务队列中的promise任务。其他的上面常见的异步操作加入队列的时间没有相应的优先级

setTimeout(function(){console.log('111')},0);new Promise(function(resolve,reject){   console.log("2222");//此处还没有执行异步操作,执行异步操作及执行回调函数,在promise中即then中的回调  resolve();}).then(function(){console.log('3333')})console.log("44444");//输出// 2222// 44444//上面的两个输出属于同步操作// 3333//promise加入到队列的优先级高于setTimeout//111

注:

1)、onclick 由浏览器内核的 DOM Binding 模块来处理,当事件触发的时候,回调函数会立即添加到任务队列中。 2)、setTimeout 会由浏览器内核的 timer 模块来进行延时处理,当时间到达的时候,才会将回调函数添加到任务队列中。3)、ajax 则会由浏览器内核的 network 模块来处理,在网络请求完成返回之后,才将回调添加到任务队列中。

二、同时在嵌套异步操作中,会将嵌套的异步加入到下次的任务队列中,以此类推(如嵌套的promise)

new Promise(function(resolve,reject){  resolve();}).then(function(){    console.log("111");    return new Promise(function(resolve,reject){   resolve();})}).then(function(){ console.log("222");})new Promise( function(resolve,reject){    resolve();}).then(function(){ console.log("33333");})//输出111 33333 222

  

转载于:https://www.cnblogs.com/daji/p/9524507.html

你可能感兴趣的文章
Authorization Bypass in RSA NetWitness
查看>>
把ISO文件当作光盘挂载
查看>>
Algs4-2.3.26子数组大小直方图
查看>>
C#下Emgucv的配置
查看>>
你未必了解的DNS
查看>>
pycharm的放大和缩小字体的显示 和ubunt的截圖工具使用 ubuntu上安装qq微信等工具...
查看>>
【Java基础】sun.misc.BASE64和Java 8 java.util.Base64区别
查看>>
响应式开发的思路和断点的选择
查看>>
使用PL/SQL连接Oracle时报错ORA-12541: TNS: 无监听程序
查看>>
Mac011--DbWrench Database安装
查看>>
[原]Flash研究(一)——本地通讯
查看>>
bootStrap table 和 JS 开发过程中遇到问题汇总
查看>>
【小知识点】input输入框在安卓以及IOS手机中光标及字体不居中解决方法
查看>>
selenium
查看>>
数据类型内置方法之数据类型与字符串类型
查看>>
VB 设置循环,以及弹出messageBox
查看>>
css3 变形 transfrom rotate scale skew
查看>>
Android 异步加载神器Loader全解析
查看>>
ReactiveCocoa源码拆分解析(一)
查看>>
Linux I/O多路复用
查看>>