首页 > 代码库 > JavaScript 中的正常任务与微任务
JavaScript 中的正常任务与微任务
正常情况下,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://javascript.ruanyifeng.com/advanced/timer.html
JavaScript 中的正常任务与微任务
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。