单个线程如何处理JavaScript中的异步代码

时间:2016-02-06 12:40:52

标签: javascript asynchronous

我知道javascript在单线程上运行。我也知道,当我们使用jquery进行异步ajax调用时,代码不会停止并继续执行串行执行。响应由回调处理。我的问题是单线程如何做到这一点? 该线程是否处理回调&当我们收到回复时停止进一步的代码执行

3 个答案:

答案 0 :(得分:6)

不,它不会停止代码执行。

回调排队,当没有其他任何东西要执行时,它将被运行。

同时没有两件事情发生,而且时间安排不是先发制人。

因此,如果你让你的单线程忙于无限循环之类的东西,回调将永远不会有机会运行。

答案 1 :(得分:1)

浏览器管理事件队列。当发生事件时,例如来自Ajax调用,计时器触发或鼠标或触摸事件的响应,当主线程处于空闲状态时,将在主线程上调用相应的回调。

答案 2 :(得分:0)

这并不是它的工作原理,因为它取决于你是使用Node还是浏览器以及哪个浏览器,但它是一个很好的心理模型。

JavaScript正在使用另一种语言,如C语言,它是多线程的。当JavaScript运行ajaxs请求时,它会将请求添加到队列中,并且为处理网络请求而构建的语言将执行此操作。请求完成后,它会更改队列中的值。 在每个进程周期之后,JavaScript将检查此队列并运行链接到已完成任务的任何回调。因此,JavaScript不会自行完成该过程,只会检查它们何时完成。