javascript - 事件队列和微任务队列之间有什么关系吗?
问题描述
我的理解
有人向我描述过,对于异步操作,一旦它们“加载”,它们的返回值就会进入事件队列。
还向我描述了Promise
s & .then
s 是异步操作,它们的返回值堆积在 micro-task|PromiseJobs 队列中。
如果我们将 'front-of-the-queue' 定义为第一个异步操作 'loaded' 的结果的目的地......
我知道在事件队列或微任务队列的前面加载到它之前,调用堆栈/宏任务队列必须是空的。
我的问题
事件队列和微任务队列之间有什么关系吗?
不相关的代码片段
const f = () => {
console.log('1')
new Promise((resolve, reject) =>
resolve(2)
).then(resolve => console.log(resolve))
}
f()
counter = 0;
for (let index = 0; index < 1000000000; index++) {
counter = index;
}
console.log(3);
解决方案
microtask
队列或job
队列是在 ES6 中随着 Promise 的引入而引入的。
没有任何这种关系,但有区别,事件队列将任务放在队列的后面,在所有其他任务之后,而微任务队列将它放在前面,并在当前函数之后立即执行任务调用堆栈被执行。
microtask
队列 >队列的总体优先级event
(对Node js和Frontend Javascript都有效)。
更多解释在这里
推荐阅读
- react-native - 使用堆栈导航标题导航到购物车屏幕
- css - 如何在标签中始终保留两位小数并对齐价目表
- python - 以微秒精度打印消息
- java - java.lang.NullPointerException Andriod Studio Java
- machine-learning - 如何计算精度和F1?
- c++ - 如何扩展先前初始化的内存大小?
- winapi - 禁用在 Windows 10 时间轴中显示的项目
- mysql - docker-compose MySQL 容器,用于使用 GithubActions 进行自动化测试
- python - 奇怪的AttributeError仅在赋值时
- angularjs - 预置资源以通过 AWS CloudFormation 部署 React(MERN)/Angular(MEAN) 应用程序