2012-06-17 66 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); 
     })