Node环境
- 先执行:
Process.nextTick
- 然后执行微任务:
Promise.resolve或queueMicrotask
- 再然后执行宏任务:
setTimeout或setInterval
- 最后执行宏任务:
setImmediate
浏览器环境
- 先执行微任务:
Promise.resolve或queueMicrotask或MutationObserver
- 然后执行宏任务:
setTimeout
- 最后执行宏任务:
setInterval
queueMicrotask(() => {
});
const observer = new MutationObserver(function(mutations, observer) {
});
observer.observer(element, options);
observer.observer(element, {
childList: true,
attributes:true,
charactorData:true,
});
function runMicroTask(fn) {
if (typeof fn !== "function") {
throw new TypeError("fn is not a function");
}
const observer = new MutationObserver(fn);
const elem = document.createElement("div");
observer.observe(elem, {
childList: true,
attributes: true,
charactorData: true,
});
elem.innerText = ".";
}
runMicroTask(()=>{
console.log('MutationObserver');
})
Promise.resolve().then(()=>{
console.log("Promise");
})
你想要的,我都有
function runMicroTask(fn) {
if (typeof fn !== "function") {
throw new TypeError("fn is not a function");
}
if (typeof process !== "undefined") {
process.nextTick(fn);
} else if (typeof queueMicrotask === "function") {
queueMicrotask(fn);
} else if (typeof Promise === "function") {
Promise.resolve().then(fn);
} else if (typeof MutationObserver === "function") {
const observer = new MutationObserver(fn);
const elem = document.createElement("div");
observer.observe(elem, {
childList: true,
attributes: true,
charactorData: true,
});
elem.innerText = ".";
}else{
setTimeout(fn, 0);
}
}