宏任务:script 定时器 微任务:promiss process.nexttick

new Promise(function(resolve){console.log(3);//此为同步程序resolve();//同步 是否异步 由内部函数决定console.log(4);
}).then(function(){
//。then 异步console.log(5);
});async function async1() {console.log("async1 start");//同步await  async2();//同步 是否异步 由内部函数决定console.log("async1 end");//异步开始}

  process.nextTick 永远大于 promise.then

知乎练习题

setTimeout(function () {console.log(4)
}, 0);
new Promise(function (resolve) {console.log(1);for (var i = 0; i < 10000; i++) {i == 9999 && resolve()}console.log(2)
}).then(function () {console.log(5)
});
console.log(3);// 1 3 2  5 4 错误
// 12354 ✅
// 由于整个 script 也属于一个 macrotask, 由于会先执行 macrotask 中的第一个任务,
再加上promise 构造函数因为是同步的,所以会先打印出 1和2然后继续同步执行末尾的
console.log(3) 打印出3 此时 setTimeout 被推进到 macrotask 队列中,promise.then 回调被推进到 microtask 队列中由于在第一步中已经执行完了第一个
macrotask , 所以接下来会顺序执行所有的 microtask, 也就是 promise.then 的回调函数
,从而打印出5microtask 队列中的任务已经执行完毕,继续执行剩下的 macrotask 队列中
的任务,也就是 setTimeout, 所以打印出 4

  

“剩下的疑问: process.nextTick也会放入microtask quque,为什么优先级比promise.then高呢? 到底是不是setTimeout有一个依赖实现的最小延迟?4ms?”

process.nextTick 永远大于 promise.then,原因其实很简单。。。在Node中,_tickCallback在每一次执行完TaskQueue中的一个任务后被调用,而这个_tickCallback中实质上干了两件事: 1. nextTickQueue中所有任务执行掉(长度最大1e4,Node版本v6.9.1) 2. 第一步执行完后执行_runMicrotasks函数,执行microtask中的部分(promise.then注册的回调) 所以很明显process.nextTick > promise.then

转载于:https://www.cnblogs.com/smzd/p/8482278.html

记了老是忘记那就写下来吧宏任务微任务相关推荐

  1. mysql改表字段类型导致数据丢失_故障分析 | 记一次 MySQL 主从双写导致的数据丢失问题【转】...

    一.问题起源 不久前用户反馈部门的 MySQL 数据库发生了数据更新丢失.为了解决这个问题,当时对用户使用的场景进行了分析.发现可能是因为用户在两台互为主从的机器上都进行了写入导致的数据丢失. 如图所 ...

  2. 每日一题(9)—— 写一个标准宏MIN,这个宏输入两个参数并返回较小的一个

    写一个标准宏MIN,这个宏输入两个参数并返回较小的一个. 分析: 宏定义的注意两点: 1.数据类型是否有溢出的风险(如一年有多少个秒的宏): 2.带参宏的每个参数都要用括号括起来. #define M ...

  3. linux命令老是忘记,Linux可能会忘记的命令整理

    Linux可能会忘记的命令整理 因为太常见的大家都会,太不常见的碰上的也少,所以来整理一下一般般常见或者由于过于常见而忘记细节的命令好啦. 时间充足的话可以再过一遍这个,突然发现之前笔记做得还是很认真 ...

  4. bug诞生记——const_cast引发只读数据区域写违例

    对于C++这种强类型的语言,明确的类型既带来了执行的高效,又让错误的发生提前到编译期.所以像const这类体现设计者意图的关键字,可以隐性的透露给我们它描述的对象的使用边界.它是我们的朋友,我们要学会 ...

  5. FP error code老是忘记的看这里:只给出最常用的几个。

    把常见的几个记牢,不要在比赛时纠结. 错误2:输入文件未找到. 错误106:数据读入的格式错误,往往是读入语句出错. 错误200:被零除. 错误201:范围检查错误,数组越界. 错误202:栈溢出. ...

  6. flink的map等常用api失效(记一次许久未写flink的坑)

    许久未写flink了,到了新环境导入了相应的依赖包准备跑通一下环境,但是在进行map/flatmap/filter等常规操作时发现传入函数会失败.一直没搞明白什么原因.后来才发现是导包导入错误如图所示 ...

  7. 记一次Docker容器中写出文件编码错误

    时间:2018-7-31 现象:项目在本地启动下载文件压缩后,没有出现乱码问题,但在docker容器中部署项目后,写出文件压缩后中文乱码 解决过程: 首先在代码中尝试了多种写出方法.因为有文件需要压缩 ...

  8. sql text转image_[转]故障分析 | 记一次 MySQL 主从双写导致的数据丢失问题

    作者:戴骏贤 网易游戏 技术部资深数据库系统工程师. 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源. 一.问题起源 不久前用户反馈部门的 MySQL ...

  9. 网上收集下boost::asio发送与传输相关的几个函数,老是忘记

    刚连接上:调用async_accept 1 boost::shared_ptr<tcp::socket> spMySocket(new tcp::socket(m_ioservice)); ...

最新文章

  1. 【随笔】卷积神经网络中的卷积怎么卷?
  2. 2018-03-26
  3. Nandflash希尔特编程器烧录带来的一些点知识信息
  4. 工作67:三级级联问题
  5. Django之创建应用以及配置路由
  6. 图像滤波与滤波器基础知识
  7. 使用Jenkins打包和部署Maven工程步骤详解
  8. 自制实时绿幕视频背景换图片视频的抠图软件
  9. IDEA中JS文件中文乱码
  10. 《诗六十首》一个会写诗的程序员
  11. 有比鸿蒙还强的境界吗,《庄子》鸿蒙问道:看似愚昧,实则为大境界
  12. springboot+微信小程序校园疫情智慧防控系统毕业设计源码011133
  13. ubuntu系统压力测试工具--stress
  14. linux如何切换到独立显卡,Ubuntu安装并切换Nvidia双显卡驱动的方法教程
  15. win10 小娜搜索空白
  16. ECC椭圆曲线加密的特点以及在有限域(Fp)的三点共线问题
  17. fishtank 测试 linux,Fishtank fitts:a desktop VR testbed for evaluating 3D pointing techniques
  18. 哪些行业可以申请高新技术企业?
  19. 中海达数据怎么转rinex_中海达GPS数据处理软件包使用手册-(36页)-原创力文档...
  20. 软件上线后翻车?教你如何化解!(绝密)

热门文章

  1. minincom cannot open /dev/modem
  2. php 四舍五入百位,php取整函数ceil,floor,round,intval函数的区别
  3. java jolt tuxedo_java使用jolt调用tuxedo服务
  4. mysql对所有列的数据进行修改6_MySQL的SQL语句 - 数据定义语句(6)- ALTER TABLE 语句 (3)...
  5. linux的samb配置文件,Linux系统如何配置samba文件服务器?
  6. netty worker线程数量_Dubbo线程模型
  7. 图形学教程Lecture 14: RayTracing1(Acceleration Radiometry)知识点总结
  8. ioc框架 java_从零开始实现一个简易的Java MVC框架(三)--实现IOC
  9. amd为什么还用针脚_为什么AMD不取消cpu上的针脚?
  10. 爬虫界又出神器|一款比selenium更高效的利器