Javascript 当循环在语句后面时,为什么JS警报在console.log之前执行

Javascript 当循环在语句后面时,为什么JS警报在console.log之前执行,javascript,Javascript,我有一个JS代码片段,用于在调用之间引入暂停。该片段是: function intPause(_wg_time_msec) { var _wg_now = new Date(); var _wg_expire = _wg_now.getTime() + _wg_time_msec; while(_wg_now.getTime() < _wg_expire) _wg_now = new Date(); } 函数暂停(_wg_time_msec){ v

我有一个JS代码片段,用于在调用之间引入暂停。该片段是:

function intPause(_wg_time_msec) {
    var _wg_now = new Date();
    var _wg_expire = _wg_now.getTime() + _wg_time_msec;
    while(_wg_now.getTime() < _wg_expire)
        _wg_now = new Date();
}
函数暂停(_wg_time_msec){
var_wg_now=新日期();
var_wg_expire=_wg_now.getTime()+_wg_time_msec;
while(_wg_now.getTime()<_wg_expire)
_wg_now=新日期();
}

现在我看到的是,如果在while循环之前向这个函数添加一个警报,它会立即显示警报,然后运行while循环,但是如果我添加一个console.log而不是alert,console.log会在while循环完成后回显数据。有人能帮助我理解这种行为吗?我如何才能找到一种更好的方法来引入调用之间的暂停。

使用jquery,您可以临时将ajax调用设置为同步:

$.ajaxSetup({ "async": false });
// make synchornous ajax call
var jqHxr = $.get(....)
$.ajaxSetup({"async": true});

对访问你网站的人来说,这真是一件可怕的事情。您基本上是在用这些代码加载他们的CPU,这可能会导致浏览器发出“慢速脚本”警告。改为使用
setTimeout()
。噢和
console.log()
不同于
alert()
,因为它不一定是同步的。这就是它的实现方式。你想打什么电话?为什么需要在它们之间暂停?@Pointy:我知道这段代码很糟糕,但我有一个特殊的需要,setTimeout不能解决这个问题。你不能保证当用户离开页面时,你能完成任何事情;例如,他们可能会将电源线从计算机中拔出。根据我的经验,这种情况是一些基本设计缺陷的证据。我甚至可以在调用时将ajax调用转换为同步,但问题是,如果服务器在给定时间内没有响应,我不希望它被卡住。我认为,在Ajax调用中添加一个错误超时将非常有用。有什么建议吗?您可能应该阅读jquery.ajaxapi()--ajax方法有一个超时设置,可以用相同的方式覆盖(即$.ajaxSetup({“timeout”:1000});)。如果请求超时,将调用error函数。这就是我所说的,我必须更改Ajax调用才能这样做。但是我想做的最后一件事是,Sync调用是否会延迟页面卸载事件?您不需要添加超时,它内置于jquery中。你说的是asp.net的页面卸载吗?如果在页面上单击链接,则为网页卸载事件。