异步任务在javascript中何时启动?
假设一个javascript任务进行异步调用。 e、 g.xhr.发送(资料)异步任务在javascript中何时启动?,javascript,asynchronous,event-handling,synchronous,Javascript,Asynchronous,Event Handling,Synchronous,假设一个javascript任务进行异步调用。 e、 g.xhr.发送(资料) (异步)发送是否立即在另一个线程中开始?或 在当前任务完成之前,发送是否不会开始 我很确定这是(2)后者,但这种行为是由规范涵盖的,还是仅仅是典型的实现。 同样地。。。 创建侦听器是否被视为同步调用? 是否有一个规范涵盖这一点?这个问题主要由@Alnitak回答,最终由@Alnitak回答 实现可能有所不同,但语义似乎与本摘要中概述的相同 异步调用(通常)会导致执行立即在单独的线程中开始。[例如xhr.send()]
是否有一个规范涵盖这一点?这个问题主要由@Alnitak回答,最终由@Alnitak回答 实现可能有所不同,但语义似乎与本摘要中概述的相同
正如您从代码中看到的,有几个地方将任务添加到任务队列中,调用dispatchEvent() 好吧,它实际上是1,但我不能引用章节。@briosheje没有什么可以说浏览器不能为内部目的生成线程。这将比使用事件驱动I/O更简单,因为事件驱动I/O可能很难与面向用户的事件分派循环很好地匹配。[或者换句话说,如果您在面向用户的代码中启动了一个长期任务,您如何确保它不会阻止正在进行的AJAX请求(如果它们共享同一个事件队列)?]我认为这是(2)的原因,因为如果我同时调用xhr.send()和xhr.addEventListener()我找到的消息来源向我保证,听众不会错过正在收听的事件。在(1)的情况下,异步任务有可能在当前任务之前完成(尽管很小)。@phreed这是不同的-XHR发送的异步结果将添加到事件队列中,并且在所有当前运行的代码块完成之前不会查看事件队列。不过,您特别询问了发送何时开始。任务不是“代码行”或单个函数调用-它是作为先前触发事件的结果而当前执行的任何和所有代码。@briosheje就用户而言,Javascript在单个线程中执行(尽管WebWorkers)。不过,该实现可以随意使用线程。