2012-06-17 27 views
0

我目前正在jQuery中尝试异步函数调用,并且卡住了。请看下面的例子:Javascript:使用jQuery的异步函数调用

<html> 
    <head> 
     <script type="text/javascript" src="http://code.jquery.com/jquery-1.7.2.min.js"></script> 
    </head> 
    <body> 
     <script type="text/javascript"> 
      f = function() { 
       alert("f1"); 
       var x = 0; 
       for (var i = 0; i < 2500000000; i++) { 
        x++; 
       } 
       alert("f2"); 
      } 

      $.when(f()).done(alert("done")); 
      alert("moving on..."); 
     </script> 
    </body> 
</html> 

我希望按以下顺序警报的消息:“F1”,“继续前进......”,“F2”,“完成” 但是当我运行的代码在Chrome中,我得到的是:“f1”,10秒内没有任何反应,“f2”,“完成”,“继续......”。这与我看起来不同步。我做错了什么或者这是预期的行为?如果是这样,使用when函数和回调函数的重点是什么?我不能同时调用函数f吗?

+0

http://api.jquery.com/jQuery.when/ – SLaks

回答

2
$.when(f()) 

这要求f()立即(像任何其他函数调用),然后将结果传递给$.when

$.when()不奇迹般地使一个功能异步;它只能用于现有的异步操作(例如,AJAX)。

在Javascript中实现多线程的唯一方法是使用Web Workers。

+0

感谢您的澄清。 – jfrohnhofen

0

$ .when采用一个已缓冲值或一个正常值。 如果传递正常值,则立即调用它,如果传递了已传递的值,则在操作完成时调用它 对于JavaScript中的异步操作,因此它将立即执行。请参阅下面的示例以获取正常值

$.when({ x: 10 }).then(function (option) { 
      alert(option.x); 
     })