JS如何确定何时调用回调函数



我想知道JavaScript回调是如何工作的。我特别不理解异步XmlHttpRequest是如何工作的。JS如何确定服务器(在一个线程中)返回了一些值,以及何时调用回调方法?它是建立在计时器上的吗?

这里更详细地回答了一个非常相似的问题。

基本答案是,底层网络是在操作系统级别进行的,当传入的网络数据包到达时,可能会有线程或某种类型的通知。当结果完成后,将向javascript事件队列中添加一个事件。当该事件到达事件队列的顶部并且javascript准备对其执行操作时,将触发适当的javascript ajax事件,从而启动javascript链,从而调用回调。

超时可能涉及一些定时器,但定时器不用于知道ajax响应何时到达。这是基于浏览器使用的操作系统级网络支持。

您不会使用定时器,因为您无法判断它们何时应该触发。

我想它是使用某种堆栈/队列[列表或表]来跟踪调用,并根据返回的信息关闭响应函数,告诉您它正在响应哪个请求。

请记住,javascript是在环境中运行的。这种环境不是单线程的。当xhr返回时,浏览器(环境)会通知javascript引擎xhr已返回,然后它将执行回调。还要记住,即使用户的javascript编程模型是单线程的,javascript本身也不一定是.

基本上。。

无论何时没有javascript执行,都会检查从settimeout触发的事件和对XmlHttpRequest的响应。它们确实被添加到了事件队列中。

这样做的有趣效果是,只要javascript当前正在执行,就永远不会触发这样的事件。

XmlHttpRequest的异步特性是在比javascript更低的级别上提供的(由浏览器提供)。回调函数由浏览器向javascript引擎发出请求已完成的信号来启动。

最新更新