2012-01-02 44 views
1

我有一段JS代码片段,我使用它来介绍在调用之间引入暂停。该片段是:为什么在console.log之前执行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(); 
} 

现在我看到的是,如果一个警报添加到while循环之前此功能,它显示了警报瞬间,然后运行while循环,但如果我添加的console.log代替console.log在while循环完成后回显数据。有人能帮助我理解这种行为吗?我怎样才能找到一种更好的方式在呼叫之间引入暂停。

+6

这是一个非常可怕的事情做的人访问你的网站。您基本上是使用该代码加载CPU,并且很可能导致浏览器发出“缓慢的脚本”警告。改用'setTimeout()'。 – Pointy 2012-01-02 14:26:49

+2

哦,'console.log()'不同于'alert()',因为它不一定是同步的。这就是它实施的方式。 – Pointy 2012-01-02 14:27:46

+0

你正在尝试做什么?你为什么需要在他们之间暂停? – Jason 2012-01-02 14:30:14

回答

0

则可以暂时将AJAX使用jquery调用是同步的:

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

我甚至可以在调用时调用ajax调用,但要点是如果服务器在给定时间内没有响应,我不希望它卡住。我认为,在Ajax调用中添加一个错误超时会相当有用。有什么建议吗? – Neo 2012-01-02 15:16:57

+0

你可能应该阅读jquery.ajax api(http://api.jquery.com/jQuery.ajax/) - 有一个超时设置的ajax方法,可以重写相同的方式(即$ .ajaxSetup({ “timeout”:1000});)。如果请求超时,错误函数将被调用。 – Jason 2012-01-02 15:25:08

+0

这就是我所说的,我将不得不改变我的Ajax调用来这样做。但是我想这样做是最后一件事,Sync调用也会延迟页面卸载事件吗? – Neo 2012-01-02 15:34:55

相关问题