小编典典

是否可以确保事件处理程序在调用AJAX回调之前完成?

ajax

假设我有一个事件处理程序,它对服务器进行了两次AJAX调用:

$("#foo").click(function(){ 
    $.get("bar", function(){ alert("Hello"); });
    $.get("baz", function(){ alert("World"); });
});

我意识到,调用回调的顺序是不确定的,因为它取决于每个请求花费的时间等。

但是,这是我的问题:是否可以保证在调用两个回调函数之前到达事件处理程序的末尾?我已经读过页面的所有Javascript都在一个线程中执行,因此我认为这意味着click在可以调用任何回调之前,一定要完成我的事件处理程序。

这样对吗?还是有可能第一个请求可能已经完成,并且在我们到达事件处理程序的结尾之前就执行了第一个回调?


阅读 231

收藏
2020-07-26

共1个答案

小编典典

是的,这是可以保证的,而且您是对的-只有一个线程(暂时不考虑web-worker)。当一段JavaScript代码执行(占用执行线程)并且AJAX回调到达(或任何其他GUI事件,超时等)时,它将排队并等待直到执行线程空闲(当前代码段完成)。

JavaScript引擎将永远不会中断正在运行的代码来处理传入事件-事件将始终在队列中轻轻等待。这就是在执行CPU密集型代码时GUI似乎冻结的原因-
不处理任何事件。这也是同步AJAX请求不正确的原因。

2020-07-26