JavaScript 中的正常任务与微任务
来源:互联网 发布:js复合保温板 编辑:程序博客网 时间:2024/04/29 17:13
正常情况下,JavaScript的任务是同步执行的,即执行完前一个任务,然后执行后一个任务。只有遇到异步任务的情况下,执行顺序才会改变。
这时,需要区分两种任务:正常任务(task)与微任务(microtask)。它们的区别在于,“正常任务”在下一轮Event Loop执行,“微任务”在本轮Event Loop的所有任务结束后执行。
console.log(1);setTimeout(function() { console.log(2);}, 0);Promise.resolve().then(function() { console.log(3);}).then(function() { console.log(4);});console.log(5);// 1// 5// 3// 4// 2
上面代码的执行结果说明,setTimeout(fn, 0)在Promise.resolve之后执行。
这是因为setTimeout语句指定的是“正常任务”,即不会在当前的Event Loop执行。而Promise会将它的回调函数,在状态改变后的那一轮Event Loop指定为微任务。所以,3和4输出在5之后、2之前。
正常任务包括以下情况。
setTimeout
setInterval
setImmediate
I/O
各种事件(比如鼠标单击事件)的回调函数
微任务目前主要是process.nextTick和 Promise 这两种情况。
转自:http://www.cnblogs.com/neverleave/p/6096772.html
原文链接:http://javascript.ruanyifeng.com/advanced/timer.html
阅读全文
0 0
- JavaScript 中的正常任务与微任务
- JavaScript任务
- GCD中的队列与任务
- JavaScript单线程之同步任务与异步任务
- Android中的线程池与任务队列
- Android中的线程池与任务队列
- 内核中的同步与任务调度
- 内核中的同步与任务调度
- 内核中的同步与任务调度
- 内核中的同步与任务调度(转载)
- Android中的线程池与任务队列
- Android中的消息机制与异步任务
- GCD中的队列与任务组合对比
- linux中的延时与定时任务
- 任务
- 任务
- 任务
- 任务
- U3D数学图形基础
- golang解析xlsx文件
- U3D脚本
- Scala学习 1.1 Scala基础与语法入门实战
- Spring AOP
- JavaScript 中的正常任务与微任务
- C++ 读入/输出优化
- git远程仓库-github
- zabbix监控ActiveMQ
- 1002. 写出这个数 (20)
- JSTL和EL
- 在活动中使用Toast
- 在 Jupyter Notebook 中更换主题与折叠代码
- 代理模式