什么时候异步任务在javascript中启动?

时间:2016-12-13 17:40:52

标签: javascript asynchronous event-handling synchronous

假设javascript任务进行异步调用。 例如xhr.send(东西)

  1. (async)发送是否立即在另一个线程中开始?或
  2. 发送是否在当前任务完成之前才开始?
  3. 我很确定它是(2)后者但是这个行为是由规范覆盖的,还是仅仅是典型的实现。 与此相类似... 是否将侦听器的创建视为同步调用? 是否有规范涵盖这个?

1 个答案:

答案 0 :(得分:1)

这个问题主要由@ Alnitak,https://stackoverflow.com/a/17439761/345427https://youtu.be/8aGhZQkoFbQhttps://www.w3.org/TR/html51/webappapis.html#event-loops明确回答

实现可能有所不同,但语义似乎如本摘要中所述。

  1. 异步调用(通常)会导致执行立即在单独的线程中开始。 [例如。 xhr.send()]
  2. 事件侦听器创建同步发生。 [例如。 xhr.addEventListener()]
  3. 当异步任务完成新任务时,表示异步结果将添加到任务队列
  4. 事件循环读取任务队列并评估下一个任务
  5. 异步结果有一个关联的回调函数,用于检查为结果注册的侦听器。
  6. 以下是异步任务的工作原理示例。 https://chromium.googlesource.com/chromium/blink.git/+/99b8c9800ac123eddc3e199088d22569c5294b22/Source/core/xml/XMLHttpRequest.cpp

    从代码中可以看出,有几个地方将任务添加到任务队列,调用dispatchEvent()。