JavaScript - 在处理ajax回调之前完成执行

时间:2013-07-19 01:48:04

标签: javascript jquery ajax performance asynchronous

当使用jquery进行AJAX调用时,如果响应假设在$ .ajax()执行后的下一行JavaScript之前返回到客户端,浏览器是否会在调用AJAX回调函数之前继续执行脚本,还是会立即暂停执行并跳转到回调函数?例如:

function MyAJAXFunction() {

    // Make AJAX call
    $.ajax({
        url: "/api/...",
        success: function () {
            alert("AJAX Callback");
        }
    });

    // Do lots of work

    alert("After lots of work");

}

假设AJAX呼叫速度非常快且“大量工作”会非常缓慢,首先会执行哪些警报?

我正在尝试在执行AJAX回调所依赖的慢任务之前启动AJAX调用,以便两个操作并行。但是,我仍然需要保证AJAX回调将执行第二个。我意识到这也可以通过jQuery Differed和Promise对象来完成,但我宁愿避免使用它们。

1 个答案:

答案 0 :(得分:2)

这里的关键概念是如何在浏览器内以单线程方式执行Javascript。浏览器维护一个事件队列,其中新事件(例如接收AJAX调用的响应)在发生时排队。浏览器还运行一个单线程事件循环,其职责是

  1. 继续寻找活动。
  2. 事件发生时的火灾事件处理程序。
  3. 然而,由于它的所有单线程循环,如果正在运行一个函数,则只有在当前函数完全完成后才会拾取下一个事件的处理函数。因此,无论响应何时到来,AJAX响应处理程序中的警报将始终显示在main函数中的警报之后。