AJAX:宏任务与微任务
在JavaScript中,微任务(microtask)和宏任务(macrotask)是用来描述事件循环(event loop)中的不同阶段的术语。
宏任务,也称为宏轮询任务(macrotasks),一般包括以下几种:
- 浏览器中的
setTimeout
setInterval
- I/O操作
- UI渲染
- 设置
setImmediate
(Node.js 环境)
微任务,也称为微轮询任务(microtasks),一般包括以下几种:
process.nextTick
(Node.js 环境)- 浏览器中的
Promise
MutationObserver
(DOM变动观察)
事件循环的逻辑是:
- 执行所有宏任务
- 执行所有微任务
- 重复以上步骤
例如,在浏览器环境中,以下代码的执行顺序可以表示如下:
console.log('script start');
setTimeout(function() {
console.log('setTimeout');
}, 0);
Promise.resolve().then(function() {
console.log('promise');
}).then(function() {
console.log('promise2');
});
console.log('script end');
执行顺序将会是:
console.log('script start')
是同步代码,立即执行setTimeout
被注册,但它是一个宏任务,所以暂时不执行Promise
相关的代码被注册为微任务console.log('script end')
是同步代码,立即执行- 当前宏任务执行完毕,执行所有微任务,因此输出
promise
和promise2
- 最后执行
setTimeout
,输出setTimeout
总结:宏任务和微任务是JavaScript中处理异步代码的重要概念,理解它们的区别和执行顺序对于有效管理和组织异步代码非常重要。
评论已关闭