2012-05-10 11 views
7

私はテスト目的のために長い時間がかかりますが、Javascriptでこれを行う良い方法が見つからないメソッドを模倣しようとしています。非常に長いforループを書く以外に良いアプローチはありますか?Javascriptでブロッキング同期メソッドを作成するにはどうすればよいですか?

+0

非常に長いループで何が間違っていますか?または時間をチェックするループ? – Joseph

+0

何も間違っていません。ちょうど 'sleep(milliseconds)'のようなことをしたいと思っています。ループの大きさを把握するのは難しいですが、試行錯誤で修正できないものはありません。 –

+0

Firefoxでは、非同期のJavaScript呼び出しを行うために、[trampolining](http://tobyho.com/2010/12/10/trampolines-in-javascript-and/ "Javascriptのトランポリンとより少ないネストされたコールバックのためのクエスト")を使用できます同期。 –

答えて

7

a loop that checks time

function sleep(milliSeconds){ 
    var startTime = new Date().getTime();     // get the current time 
    while (new Date().getTime() < startTime + milliSeconds); // hog cpu until time's up 
} 
+0

ニース。後見ではかなり明白です。 –

+1

これにより、JavaScriptエンジンが他のスレッド(Firefox <4.0などのブラウザではタブを切り替えるなど何もしない)をブロックする可能性があります。最終的にブラウザはこれに気づき、スクリプトを終了します。いい考えではない。 –

+0

Chromeで動作しますこれは明らかに配備されたコードに入っていません:) –

3

スクリプトによって要求された一定の時間だけ応答を延期するサーバーに対して、同期AJAX呼び出しを行うことができます。ただし、このメソッドは同期AJAX呼び出しをサポートしていないため、Firefoxでは動作しません。

ただ、クライアント側では、この単純な関数を使用します。

function sleep(microseconds) { 
    var request = new XMLHttpRequest; 
    request.open("GET", "/sleep.php?time=" + milliseconds); 
    request.send(); 
} 

サーバー側のsleep.phpのコード:例外

usleep(intval($_GET("sleep"))); 

は今、あなたはJavaScriptでの同期機能を遮断作成することができます( of Firefox):

alert("Hello"); 
sleep(1000000); // sleep for 1 second 
alert("World"); 
+0

+1よく知っているが、あまりにも多くの仕事:) –

関連する問題