【发布时间】:2021-12-09 00:14:26
【问题描述】:
如果Microtask Queue的优先级高于Macrotask Queue,为什么控制台日志的顺序是
scriptStartscriptEndsetTimeoutResponse
而不是
scriptStartscriptEndResponsesetTimeout
鉴于for(let i=0;i<100000000;i++){ const start = Date.now(); } 需要足够的时间来保持主线程忙碌,直到 fetch 的响应到达?
完整代码
console.log("scriptStart")
setTimeout(() => {
console.log("setTimeout");
}, 0);
fetch("https://jsonplaceholder.typicode.com/todos/1").then(() => {
console.log('Response');
});
for (let i = 0; i < 100000000; i++) {
const start = Date.now();
}
console.log("scriptEnd")
【问题讨论】:
-
微任务队列没有任何优先级系统,队列中的微任务将在 JS 堆栈为空或在下一个微任务检查点时立即执行。但是这里 fetch.then 微任务只会在另一个任务中排队。
-
相关(如果不是欺骗)stackoverflow.com/questions/62035390/…
标签: javascript v8 event-loop