【问题标题】:Is their any relationship between the event-queue and the microtask queue?事件队列和微任务队列之间有什么关系吗?
【发布时间】:2020-08-23 20:14:31
【问题描述】:

我的理解

有人向我描述过,对于异步操作,一旦它们“加载”,它们的返回值就会进入事件队列。

还向我描述了Promises 和.thens 是异步操作,它们的返回值在微任务|PromiseJobs 队列中堆叠。

如果我们将'front-of-the-queue'定义为第一个异步操作'loaded'结果的目的地......

我知道调用堆栈/宏任务队列在加载事件队列或微任务队列的前端之前必须为空。


我的问题

事件队列和微任务队列有什么关系吗?


不相关的代码-sn-p

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);

【问题讨论】:

  • 您在哪里读到过无法解释差异的微任务和宏任务?
  • @Bergi 这是我使用的:javascript.info/event-loop
  • "在每个宏任务之后,引擎会立即执行微任务队列中的所有任务,然后再运行任何其他宏任务或渲染或其他任何事情。" 很清楚,不是是吗?

标签: javascript


【解决方案1】:

microtask 队列或 job 队列是在 ES6 中引入的,并引入了 Promise。

没有任何这样的关系,但有区别,事件 queue 将任务放在队列的后面,在所有其他任务之后 任务,而微任务队列将其放在前面并执行任务 在调用堆栈中的当前函数执行之后。

microtask queue > event queue 的总体优先级(对Node jsFrontend Javascript均有效。

更多解释here

【讨论】:

  • 感谢@Shubh,这是一篇好文章。希望能找到更多这样的。现在我可以确认事件队列和微任务队列是两个独立的东西 - 在事件队列或类似的东西中找不到微任务队列吗?
  • 是的,这是为不同任务设计的两个不同队列:)
猜你喜欢
  • 2019-07-25
  • 2022-10-06
  • 2015-08-20
  • 2021-05-17
  • 1970-01-01
  • 2019-07-12
  • 2018-11-18
  • 2017-04-14
  • 1970-01-01
相关资源
最近更新 更多