假设我有一个事件处理程序,可以对服务器进行两个
AJAX调用:
$("#foo").click(function(){ $.get("bar",function(){ alert("Hello"); }); $.get("baz",function(){ alert("World"); }); });
我意识到调用回调的顺序是非确定性的,因为它取决于每个请求需要多长时间等等.
但这是我的问题:是否保证在调用任何一个回调函数之前,我将到达我的事件处理程序的结尾?我已经阅读了一个页面的所有Javascript在一个单独的线程中执行,所以我认为这意味着我的点击事件处理程序保证在任何回调可以被调用之前完成.
解决方法
是的,这是有保证的,你是对的 – 只有一个线程(暂时忽略了
web-workers).当执行一段JavaScript代码(占用执行线程)和AJAX回调到达(或任何其他GUI事件,超时等)时,它将排队等待,直到执行线程空闲(当前代码段完成).
JavaScript引擎永远不会中断运行代码来处理传入的事件 – 事件将始终在队列中轻轻等待.这就是当cpu密集型代码执行时,GUI似乎冻结的原因 – 没有事件被处理.这也是为什么同步的AJAX请求是坏的.
也可以看看
> JavaScript equivalent of SwingUtilities.invokeLater()
> “atomic” operation desturbed by asynchronous ajax callbacks
> Are there any atomic javascript operations to deal with Ajax’s asynchronous nature?
> how is async programming (promises) implemented in javascript? isn’t javascript a ui-threaded environment?
原文地址:https://www.jb51.cc/ajax/155410.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。